2 * Authors.....: Jens Steube <jens.steube@gmail.com>
6 #include <ext_xnvctrl.h>
8 int xnvctrl_init (XNVCTRL_PTR
*xnvctrl
)
10 if (!xnvctrl
) return (-1);
12 memset (xnvctrl
, 0, sizeof (XNVCTRL_PTR
));
16 // unsupport platform?
21 xnvctrl
->lib_x11
= dlopen ("libX11.so", RTLD_LAZY
);
23 if (xnvctrl
->lib_x11
== NULL
)
25 if (data
.quiet
== 0) log_info ("WARNING: load X11 library failed, proceed without X11 HWMon enabled.");
30 xnvctrl
->lib_xnvctrl
= dlopen ("libXNVCtrl.so", RTLD_LAZY
);
32 if (xnvctrl
->lib_xnvctrl
== NULL
)
34 xnvctrl
->lib_xnvctrl
= dlopen ("libXNVCtrl.so.0", RTLD_LAZY
);
36 if (xnvctrl
->lib_xnvctrl
== NULL
)
38 if (data
.quiet
== 0) log_info ("WARNING: load XNVCTRL library failed, proceed without XNVCTRL HWMon enabled.");
44 xnvctrl
->XOpenDisplay
= dlsym (xnvctrl
->lib_x11
, "XOpenDisplay");
45 xnvctrl
->XCloseDisplay
= dlsym (xnvctrl
->lib_x11
, "XCloseDisplay");
47 xnvctrl
->XNVCTRLQueryTargetAttribute
= dlsym (xnvctrl
->lib_xnvctrl
, "XNVCTRLQueryTargetAttribute");
48 xnvctrl
->XNVCTRLSetTargetAttribute
= dlsym (xnvctrl
->lib_xnvctrl
, "XNVCTRLSetTargetAttribute");
52 // not using HC_LOAD_FUNC() here, because we're using 2 libraries and therefore have 2 different variable names for them
57 void xnvctrl_close (XNVCTRL_PTR
*xnvctrl
)
65 dlclose (xnvctrl
->lib_x11
);
68 if (xnvctrl
->lib_xnvctrl
)
70 dlclose (xnvctrl
->lib_xnvctrl
);
79 int hm_XNVCTRL_XOpenDisplay (XNVCTRL_PTR
*xnvctrl
)
81 void *dpy
= xnvctrl
->XOpenDisplay (NULL
);
93 void hm_XNVCTRL_XCloseDisplay (XNVCTRL_PTR
*xnvctrl
)
95 xnvctrl
->XCloseDisplay (xnvctrl
->dpy
);
98 int get_fan_control (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
100 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_COOLER_MANUAL_CONTROL
, val
);
107 int set_fan_control (XNVCTRL_PTR
*xnvctrl
, int gpu
, int val
)
109 xnvctrl
->XNVCTRLSetTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_COOLER_MANUAL_CONTROL
, val
);
113 int rc
= get_fan_control (xnvctrl
, gpu
, &cur
);
115 if (rc
== -1) return -1;
117 if (cur
!= val
) return -1;
122 int get_core_threshold (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
124 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_GPU
, gpu
, 0, NV_CTRL_GPU_CORE_THRESHOLD
, val
);
131 int get_fan_speed_current (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
133 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_CURRENT_LEVEL
, val
);
140 int get_fan_speed_target (XNVCTRL_PTR
*xnvctrl
, int gpu
, int *val
)
142 int rc
= xnvctrl
->XNVCTRLQueryTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_LEVEL
, val
);
149 int set_fan_speed_target (XNVCTRL_PTR
*xnvctrl
, int gpu
, int val
)
151 xnvctrl
->XNVCTRLSetTargetAttribute (xnvctrl
->dpy
, NV_CTRL_TARGET_TYPE_COOLER
, gpu
, 0, NV_CTRL_THERMAL_COOLER_LEVEL
, val
);
155 int rc
= get_fan_speed_target (xnvctrl
, gpu
, &cur
);
157 if (rc
== -1) return -1;
159 if (cur
!= val
) return -1;