Support setting the X3D V-Cache Mode

This commit is contained in:
cjwilsontech
2025-09-03 20:38:56 -07:00
parent 3c024dd6d9
commit e98e6837bb
9 changed files with 467 additions and 3 deletions

View File

@@ -114,6 +114,8 @@ struct GameModeConfig {
char cpu_park_cores[CONFIG_VALUE_MAX];
char cpu_pin_cores[CONFIG_VALUE_MAX];
char amd_x3d_mode_desired[CONFIG_VALUE_MAX];
char amd_x3d_mode_default[CONFIG_VALUE_MAX];
long require_supervisor;
char supervisor_whitelist[CONFIG_LIST_MAX][CONFIG_VALUE_MAX];
@@ -242,6 +244,23 @@ static bool get_string_value(const char *value, char output[CONFIG_VALUE_MAX])
return true;
}
/*
* Get and validate an x3d mode value
*/
static bool get_x3d_mode_value(const char *name, const char *value, char output[CONFIG_VALUE_MAX])
{
if (strcmp(value, "frequency") != 0 && strcmp(value, "cache") != 0) {
LOG_ERROR("Config: %s has invalid value '%s'. Valid values are 'frequency' or 'cache'\n",
name,
value);
return false;
}
strncpy(output, value, CONFIG_VALUE_MAX - 1);
output[CONFIG_VALUE_MAX - 1] = '\0';
return true;
}
/* Controls whether to read the protected config variables */
static bool load_protected = false;
@@ -316,6 +335,10 @@ static int inih_handler(void *user, const char *section, const char *name, const
valid = get_string_value(value, self->values.cpu_park_cores);
} else if (strcmp(name, "pin_cores") == 0) {
valid = get_string_value(value, self->values.cpu_pin_cores);
} else if (strcmp(name, "amd_x3d_mode_desired") == 0) {
valid = get_x3d_mode_value(name, value, self->values.amd_x3d_mode_desired);
} else if (strcmp(name, "amd_x3d_mode_default") == 0) {
valid = get_x3d_mode_value(name, value, self->values.amd_x3d_mode_default);
}
} else if (strcmp(section, "supervisor") == 0) {
/* Supervisor subsection */
@@ -861,6 +884,22 @@ void config_get_cpu_pin_cores(GameModeConfig *self, char value[CONFIG_VALUE_MAX]
sizeof(self->values.cpu_pin_cores));
}
void config_get_amd_x3d_mode_desired(GameModeConfig *self, char value[CONFIG_VALUE_MAX])
{
memcpy_locked_config(self,
value,
&self->values.amd_x3d_mode_desired,
sizeof(self->values.amd_x3d_mode_desired));
}
void config_get_amd_x3d_mode_default(GameModeConfig *self, char value[CONFIG_VALUE_MAX])
{
memcpy_locked_config(self,
value,
&self->values.amd_x3d_mode_default,
sizeof(self->values.amd_x3d_mode_default));
}
/*
* Checks if the supervisor is whitelisted
*/