summaryrefslogtreecommitdiffstats
path: root/src/core/settings.c
diff options
context:
space:
mode:
authorMichael Brown2013-08-27 14:46:12 +0200
committerMichael Brown2013-08-27 14:46:12 +0200
commit3e975ecf3fee92394878b75046f70375ada597a2 (patch)
tree6b6591e13b325e13faa026556341a69666f50f78 /src/core/settings.c
parent[3c90x] Fix High-MTU packet reception (diff)
downloadipxe-3e975ecf3fee92394878b75046f70375ada597a2.tar.gz
ipxe-3e975ecf3fee92394878b75046f70375ada597a2.tar.xz
ipxe-3e975ecf3fee92394878b75046f70375ada597a2.zip
[settings] Make built-in settings a linker table
Allow for configurable provision of built-in settings by placing them in a linker table rather than an array. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/settings.c')
-rw-r--r--src/core/settings.c92
1 files changed, 46 insertions, 46 deletions
diff --git a/src/core/settings.c b/src/core/settings.c
index 87de0d1b..0fe8b2eb 100644
--- a/src/core/settings.c
+++ b/src/core/settings.c
@@ -2247,29 +2247,8 @@ struct setting priority_setting __setting ( SETTING_MISC ) = {
******************************************************************************
*/
-/** A built-in setting operation */
-struct builtin_setting_operation {
- /** Setting */
- struct setting *setting;
- /** Fetch setting value
- *
- * @v data Buffer to fill with setting data
- * @v len Length of buffer
- * @ret len Length of setting data, or negative error
- */
- int ( * fetch ) ( void *data, size_t len );
-};
-
/** Built-in setting scope */
-static struct settings_scope builtin_scope;
-
-/** Error number setting */
-struct setting errno_setting __setting ( SETTING_MISC ) = {
- .name = "errno",
- .description = "Last error",
- .type = &setting_type_uint32,
- .scope = &builtin_scope,
-};
+struct settings_scope builtin_scope;
/**
* Fetch error number setting
@@ -2289,14 +2268,20 @@ static int errno_fetch ( void *data, size_t len ) {
return sizeof ( content );
}
-/** Build architecture setting */
-struct setting buildarch_setting __setting ( SETTING_MISC ) = {
- .name = "buildarch",
- .description = "Build architecture",
- .type = &setting_type_string,
+/** Error number setting */
+struct setting errno_setting __setting ( SETTING_MISC ) = {
+ .name = "errno",
+ .description = "Last error",
+ .type = &setting_type_uint32,
.scope = &builtin_scope,
};
+/** Error number built-in setting */
+struct builtin_setting errno_builtin_setting __builtin_setting = {
+ .setting = &errno_setting,
+ .fetch = errno_fetch,
+};
+
/**
* Fetch build architecture setting
*
@@ -2311,14 +2296,20 @@ static int buildarch_fetch ( void *data, size_t len ) {
return ( sizeof ( buildarch ) - 1 /* NUL */ );
}
-/** Platform setting */
-struct setting platform_setting __setting ( SETTING_MISC ) = {
- .name = "platform",
- .description = "Platform",
+/** Build architecture setting */
+struct setting buildarch_setting __setting ( SETTING_MISC ) = {
+ .name = "buildarch",
+ .description = "Build architecture",
.type = &setting_type_string,
.scope = &builtin_scope,
};
+/** Build architecture built-in setting */
+struct builtin_setting buildarch_builtin_setting __builtin_setting = {
+ .setting = &buildarch_setting,
+ .fetch = buildarch_fetch,
+};
+
/**
* Fetch platform setting
*
@@ -2333,14 +2324,20 @@ static int platform_fetch ( void *data, size_t len ) {
return ( sizeof ( platform ) - 1 /* NUL */ );
}
-/** Version setting */
-struct setting version_setting __setting ( SETTING_MISC ) = {
- .name = "version",
- .description = "Version",
+/** Platform setting */
+struct setting platform_setting __setting ( SETTING_MISC ) = {
+ .name = "platform",
+ .description = "Platform",
.type = &setting_type_string,
.scope = &builtin_scope,
};
+/** Platform built-in setting */
+struct builtin_setting platform_builtin_setting __builtin_setting = {
+ .setting = &platform_setting,
+ .fetch = platform_fetch,
+};
+
/**
* Fetch version setting
*
@@ -2353,12 +2350,18 @@ static int version_fetch ( void *data, size_t len ) {
return ( strlen ( product_version ) );
}
-/** List of built-in setting operations */
-static struct builtin_setting_operation builtin_setting_operations[] = {
- { &errno_setting, errno_fetch },
- { &buildarch_setting, buildarch_fetch },
- { &platform_setting, platform_fetch },
- { &version_setting, version_fetch },
+/** Version setting */
+struct setting version_setting __setting ( SETTING_MISC ) = {
+ .name = "version",
+ .description = "Version",
+ .type = &setting_type_string,
+ .scope = &builtin_scope,
+};
+
+/** Version built-in setting */
+struct builtin_setting version_builtin_setting __builtin_setting = {
+ .setting = &version_setting,
+ .fetch = version_fetch,
};
/**
@@ -2373,12 +2376,9 @@ static struct builtin_setting_operation builtin_setting_operations[] = {
static int builtin_fetch ( struct settings *settings __unused,
struct setting *setting,
void *data, size_t len ) {
- struct builtin_setting_operation *builtin;
- unsigned int i;
+ struct builtin_setting *builtin;
- for ( i = 0 ; i < ( sizeof ( builtin_setting_operations ) /
- sizeof ( builtin_setting_operations[0] ) ) ; i++ ) {
- builtin = &builtin_setting_operations[i];
+ for_each_table_entry ( builtin, BUILTIN_SETTINGS ) {
if ( setting_cmp ( setting, builtin->setting ) == 0 )
return builtin->fetch ( data, len );
}