[settings] Allow for writable built-in settings

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2026-06-15 16:02:12 +01:00
parent 06f36026d6
commit 807d933cea
2 changed files with 33 additions and 0 deletions
+25
View File
@@ -2758,6 +2758,30 @@ struct builtin_setting cwduri_builtin_setting __builtin_setting = {
.fetch = cwduri_fetch,
};
/**
* Store built-in setting
*
* @v settings Settings block
* @v setting Setting to store
* @v data Setting data, or NULL to clear setting
* @v len Length of setting data
* @ret rc Return status code
*/
static int builtin_store ( struct settings *settings __unused,
const struct setting *setting,
const void *data, size_t len ) {
struct builtin_setting *builtin;
for_each_table_entry ( builtin, BUILTIN_SETTINGS ) {
if ( setting_cmp ( setting, builtin->setting ) == 0 ) {
if ( ! builtin->store )
return -ENOTSUP;
return builtin->store ( data, len );
}
}
return -ENOENT;
}
/**
* Fetch built-in setting
*
@@ -2795,6 +2819,7 @@ static int builtin_applies ( struct settings *settings __unused,
/** Built-in settings operations */
static struct settings_operations builtin_settings_operations = {
.applies = builtin_applies,
.store = builtin_store,
.fetch = builtin_fetch,
};
+8
View File
@@ -268,6 +268,14 @@ struct settings_applicator {
struct builtin_setting {
/** Setting */
const struct setting *setting;
/**
* Store setting value
*
* @v data Setting data, or NULL to clear setting
* @v len Length of setting data
* @ret rc Return status code
*/
int ( * store ) ( const void *data, size_t len );
/** Fetch setting value
*
* @v data Buffer to fill with setting data