Kaynağa Gözat

[settings] Expose build architecture and platform via settings

Expose the build architecture (e.g. "i386" or "x86_64") via
${buildarch} and the firmware platform (e.g. "pcbios" or "efi") via
${platform}.  These settings directly expose the ARCH and PLATFORM
variables from the Makefile.

Note that the build architecture reflects the architecture for which
iPXE was compiled, not the architecture on which iPXE is currently
running.  The "cpuid" command can be used to detect a 64-bit system at
runtime.

Requested-by: James A. Peltier <jpeltier@sfu.ca>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 11 yıl önce
ebeveyn
işleme
0e2ba15a58
1 değiştirilmiş dosya ile 85 ekleme ve 15 silme
  1. 85
    15
      src/core/settings.c

+ 85
- 15
src/core/settings.c Dosyayı Görüntüle

@@ -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
 /**

Loading…
İptal
Kaydet