|
@@ -1985,6 +1985,19 @@ struct setting priority_setting __setting ( SETTING_MISC ) = {
|
1985
|
1985
|
******************************************************************************
|
1986
|
1986
|
*/
|
1987
|
1987
|
|
|
1988
|
+/** A built-in setting operation */
|
|
1989
|
+struct builtin_setting_operation {
|
|
1990
|
+ /** Setting */
|
|
1991
|
+ struct setting *setting;
|
|
1992
|
+ /** Fetch setting value
|
|
1993
|
+ *
|
|
1994
|
+ * @v data Buffer to fill with setting data
|
|
1995
|
+ * @v len Length of buffer
|
|
1996
|
+ * @ret len Length of setting data, or negative error
|
|
1997
|
+ */
|
|
1998
|
+ int ( * fetch ) ( void *data, size_t len );
|
|
1999
|
+};
|
|
2000
|
+
|
1988
|
2001
|
/** Built-in setting tag magic */
|
1989
|
2002
|
#define BUILTIN_SETTING_TAG_MAGIC 0xb1
|
1990
|
2003
|
|
|
@@ -2010,15 +2023,11 @@ struct setting errno_setting __setting ( SETTING_MISC ) = {
|
2010
|
2023
|
/**
|
2011
|
2024
|
* Fetch error number setting
|
2012
|
2025
|
*
|
2013
|
|
- * @v settings Settings block
|
2014
|
|
- * @v setting Setting to fetch
|
2015
|
|
- * @v data Setting data, or NULL to clear setting
|
2016
|
|
- * @v len Length of setting data
|
2017
|
|
- * @ret rc Return status code
|
|
2026
|
+ * @v data Buffer to fill with setting data
|
|
2027
|
+ * @v len Length of buffer
|
|
2028
|
+ * @ret len Length of setting data, or negative error
|
2018
|
2029
|
*/
|
2019
|
|
-static int errno_fetch ( struct settings *settings __unused,
|
2020
|
|
- struct setting *setting __unused,
|
2021
|
|
- void *data, size_t len ) {
|
|
2030
|
+static int errno_fetch ( void *data, size_t len ) {
|
2022
|
2031
|
uint32_t content;
|
2023
|
2032
|
|
2024
|
2033
|
/* Return current error */
|
|
@@ -2029,24 +2038,85 @@ static int errno_fetch ( struct settings *settings __unused,
|
2029
|
2038
|
return sizeof ( content );
|
2030
|
2039
|
}
|
2031
|
2040
|
|
|
2041
|
+/** "buildarch" setting tag */
|
|
2042
|
+#define BUILTIN_SETTING_TAG_BUILDARCH BUILTIN_SETTING_TAG ( 0x02 )
|
|
2043
|
+
|
|
2044
|
+/** Build architecture setting */
|
|
2045
|
+struct setting buildarch_setting __setting ( SETTING_MISC ) = {
|
|
2046
|
+ .name = "buildarch",
|
|
2047
|
+ .description = "Build architecture",
|
|
2048
|
+ .tag = BUILTIN_SETTING_TAG_BUILDARCH,
|
|
2049
|
+ .type = &setting_type_string,
|
|
2050
|
+};
|
|
2051
|
+
|
|
2052
|
+/**
|
|
2053
|
+ * Fetch build architecture setting
|
|
2054
|
+ *
|
|
2055
|
+ * @v data Buffer to fill with setting data
|
|
2056
|
+ * @v len Length of buffer
|
|
2057
|
+ * @ret len Length of setting data, or negative error
|
|
2058
|
+ */
|
|
2059
|
+static int buildarch_fetch ( void *data, size_t len ) {
|
|
2060
|
+ static const char buildarch[] = _S2 ( ARCH );
|
|
2061
|
+
|
|
2062
|
+ strncpy ( data, buildarch, len );
|
|
2063
|
+ return ( sizeof ( buildarch ) - 1 /* NUL */ );
|
|
2064
|
+}
|
|
2065
|
+
|
|
2066
|
+/** "platform" setting tag */
|
|
2067
|
+#define BUILTIN_SETTING_TAG_PLATFORM BUILTIN_SETTING_TAG ( 0x03 )
|
|
2068
|
+
|
|
2069
|
+/** Platform setting */
|
|
2070
|
+struct setting platform_setting __setting ( SETTING_MISC ) = {
|
|
2071
|
+ .name = "platform",
|
|
2072
|
+ .description = "Platform",
|
|
2073
|
+ .tag = BUILTIN_SETTING_TAG_PLATFORM,
|
|
2074
|
+ .type = &setting_type_string,
|
|
2075
|
+};
|
|
2076
|
+
|
|
2077
|
+/**
|
|
2078
|
+ * Fetch platform setting
|
|
2079
|
+ *
|
|
2080
|
+ * @v data Buffer to fill with setting data
|
|
2081
|
+ * @v len Length of buffer
|
|
2082
|
+ * @ret len Length of setting data, or negative error
|
|
2083
|
+ */
|
|
2084
|
+static int platform_fetch ( void *data, size_t len ) {
|
|
2085
|
+ static const char platform[] = _S2 ( PLATFORM );
|
|
2086
|
+
|
|
2087
|
+ strncpy ( data, platform, len );
|
|
2088
|
+ return ( sizeof ( platform ) - 1 /* NUL */ );
|
|
2089
|
+}
|
|
2090
|
+
|
|
2091
|
+/** List of built-in setting operations */
|
|
2092
|
+static struct builtin_setting_operation builtin_setting_operations[] = {
|
|
2093
|
+ { &errno_setting, errno_fetch },
|
|
2094
|
+ { &buildarch_setting, buildarch_fetch },
|
|
2095
|
+ { &platform_setting, platform_fetch },
|
|
2096
|
+};
|
|
2097
|
+
|
2032
|
2098
|
/**
|
2033
|
2099
|
* Fetch built-in setting
|
2034
|
2100
|
*
|
2035
|
2101
|
* @v settings Settings block
|
2036
|
2102
|
* @v setting Setting to fetch
|
2037
|
|
- * @v data Setting data, or NULL to clear setting
|
2038
|
|
- * @v len Length of setting data
|
2039
|
|
- * @ret rc Return status code
|
|
2103
|
+ * @v data Buffer to fill with setting data
|
|
2104
|
+ * @v len Length of buffer
|
|
2105
|
+ * @ret len Length of setting data, or negative error
|
2040
|
2106
|
*/
|
2041
|
2107
|
static int builtin_fetch ( struct settings *settings __unused,
|
2042
|
2108
|
struct setting *setting,
|
2043
|
2109
|
void *data, size_t len ) {
|
|
2110
|
+ struct builtin_setting_operation *builtin;
|
|
2111
|
+ unsigned int i;
|
2044
|
2112
|
|
2045
|
|
- if ( setting_cmp ( setting, &errno_setting ) == 0 ) {
|
2046
|
|
- return errno_fetch ( settings, setting, data, len );
|
2047
|
|
- } else {
|
2048
|
|
- return -ENOENT;
|
|
2113
|
+ for ( i = 0 ; i < ( sizeof ( builtin_setting_operations ) /
|
|
2114
|
+ sizeof ( builtin_setting_operations[0] ) ) ; i++ ) {
|
|
2115
|
+ builtin = &builtin_setting_operations[i];
|
|
2116
|
+ if ( setting_cmp ( setting, builtin->setting ) == 0 )
|
|
2117
|
+ return builtin->fetch ( data, len );
|
2049
|
2118
|
}
|
|
2119
|
+ return -ENOENT;
|
2050
|
2120
|
}
|
2051
|
2121
|
|
2052
|
2122
|
/**
|