mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-10 23:08:07 +00:00
Implement fan speed setting.
This commit is contained in:
parent
3681ae84cc
commit
07b847f7e7
61
adl.c
61
adl.c
@ -476,19 +476,58 @@ static int set_vddc(int gpu, float fVddc)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void get_fanrange(int gpu, int *imin, int *imax)
|
||||||
|
{
|
||||||
|
struct gpu_adl *ga;
|
||||||
|
|
||||||
|
if (!gpus[gpu].has_adl || !adl_active) {
|
||||||
|
wlogprint("Get fanrange not supported\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ga = &gpus[gpu].adl;
|
||||||
|
*imin = ga->lpFanSpeedInfo.iMinPercent;
|
||||||
|
*imax = ga->lpFanSpeedInfo.iMaxPercent;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_fanspeed(int gpu, int iFanSpeed)
|
||||||
|
{
|
||||||
|
struct gpu_adl *ga;
|
||||||
|
|
||||||
|
if (!gpus[gpu].has_adl || !adl_active) {
|
||||||
|
wlogprint("Set fanspeed not supported\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ga = &gpus[gpu].adl;
|
||||||
|
if (!(ga->lpFanSpeedInfo.iFlags & (ADL_DL_FANCTRL_SUPPORTS_RPM_WRITE | ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE )))
|
||||||
|
return 1;
|
||||||
|
if (ADL_Overdrive5_FanSpeed_Get(ga->iAdapterIndex, 0, &ga->lpFanSpeedValue) != ADL_OK)
|
||||||
|
return 1;
|
||||||
|
if ((ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_RPM_WRITE) &&
|
||||||
|
!(ga->lpFanSpeedInfo.iFlags & ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE)) {
|
||||||
|
/* Must convert speed to an RPM */
|
||||||
|
iFanSpeed = ga->lpFanSpeedInfo.iMaxRPM * iFanSpeed / 100;
|
||||||
|
ga->lpFanSpeedValue.iSpeedType = ADL_DL_FANCTRL_SPEED_TYPE_RPM;
|
||||||
|
}
|
||||||
|
ga->lpFanSpeedValue.iFanSpeed = iFanSpeed;
|
||||||
|
if (ADL_Overdrive5_FanSpeed_Set(ga->iAdapterIndex, 0, &ga->lpFanSpeedValue) != ADL_OK)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void change_gpusettings(int gpu)
|
void change_gpusettings(int gpu)
|
||||||
{
|
{
|
||||||
int val, imin = 0, imax = 0;
|
int val, imin = 0, imax = 0;
|
||||||
float fval, fmin = 0, fmax = 0;
|
float fval, fmin = 0, fmax = 0;
|
||||||
char input;
|
char input;
|
||||||
|
|
||||||
wlogprint("Change [E]ngine [M]emory [V]oltage\n");
|
wlogprint("Change [E]ngine [F]an [M]emory [V]oltage\n");
|
||||||
wlogprint("Or press any other key to continue\n");
|
wlogprint("Or press any other key to continue\n");
|
||||||
input = getch();
|
input = getch();
|
||||||
|
|
||||||
if (!strncasecmp(&input, "e", 1)) {
|
if (!strncasecmp(&input, "e", 1)) {
|
||||||
get_enginerange(gpu, &imin, &imax);
|
get_enginerange(gpu, &imin, &imax);
|
||||||
wlogprint("Enter GPU engine clock speed (%d - %d Mhz):", imin, imax);
|
wlogprint("Enter GPU engine clock speed (%d - %d Mhz)", imin, imax);
|
||||||
val = curses_int("");
|
val = curses_int("");
|
||||||
if (val < imin || val > imax) {
|
if (val < imin || val > imax) {
|
||||||
wlogprint("Value is outside safe range, are you sure?\n");
|
wlogprint("Value is outside safe range, are you sure?\n");
|
||||||
@ -500,9 +539,23 @@ void change_gpusettings(int gpu)
|
|||||||
wlogprint("Successfully modified engine clock speed\n");
|
wlogprint("Successfully modified engine clock speed\n");
|
||||||
else
|
else
|
||||||
wlogprint("Failed to modify engine clock speed\n");
|
wlogprint("Failed to modify engine clock speed\n");
|
||||||
|
} else if (!strncasecmp(&input, "f", 1)) {
|
||||||
|
get_fanrange(gpu, &imin, &imax);
|
||||||
|
wlogprint("Enter fan percentage (%d - %d %)", imin, imax);
|
||||||
|
val = curses_int("");
|
||||||
|
if (val < imin || val > imax) {
|
||||||
|
wlogprint("Value is outside safe range, are you sure?\n");
|
||||||
|
input = getch();
|
||||||
|
if (strncasecmp(&input, "y", 1))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!set_fanspeed(gpu, val))
|
||||||
|
wlogprint("Successfully modified engine clock speed\n");
|
||||||
|
else
|
||||||
|
wlogprint("Failed to modify engine clock speed\n");
|
||||||
} else if (!strncasecmp(&input, "m", 1)) {
|
} else if (!strncasecmp(&input, "m", 1)) {
|
||||||
get_memoryrange(gpu, &imin, &imax);
|
get_memoryrange(gpu, &imin, &imax);
|
||||||
wlogprint("Enter GPU memory clock speed (%d - %d Mhz):", imin, imax);
|
wlogprint("Enter GPU memory clock speed (%d - %d Mhz)", imin, imax);
|
||||||
val = curses_int("");
|
val = curses_int("");
|
||||||
if (val < imin || val > imax) {
|
if (val < imin || val > imax) {
|
||||||
wlogprint("Value is outside safe range, are you sure?\n");
|
wlogprint("Value is outside safe range, are you sure?\n");
|
||||||
@ -516,7 +569,7 @@ void change_gpusettings(int gpu)
|
|||||||
wlogprint("Failed to modify memory clock speed\n");
|
wlogprint("Failed to modify memory clock speed\n");
|
||||||
} else if (!strncasecmp(&input, "v", 1)) {
|
} else if (!strncasecmp(&input, "v", 1)) {
|
||||||
get_vddcrange(gpu, &fmin, &fmax);
|
get_vddcrange(gpu, &fmin, &fmax);
|
||||||
wlogprint("Enter GPU voltage (%.3f - %.3f Mhz):", fmin, fmax);
|
wlogprint("Enter GPU voltage (%.3f - %.3f V)", fmin, fmax);
|
||||||
fval = curses_float("");
|
fval = curses_float("");
|
||||||
if (fval < fmin || fval > fmax) {
|
if (fval < fmin || fval > fmax) {
|
||||||
wlogprint("Value is outside safe range, are you sure?\n");
|
wlogprint("Value is outside safe range, are you sure?\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user