[RFC V2 PATCH 1/6] lib: Define autoboot_options, device_type helpers

Samuel Mendoza-Jonas sam.mj at au1.ibm.com
Tue Jan 27 15:29:45 AEDT 2015


Add the new autoboot_option struct, and helper functions for working
with device_type enums. device_type_name() returns exact strings as used
by platform code to read/write nvram params, so
device_type_display_name() is added for use in user-visible strings.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj at au1.ibm.com>
---
 discover/platform.c | 17 -----------------
 lib/Makefile.am     |  1 +
 lib/types/types.c   | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 lib/types/types.h   | 15 +++++++++++++++
 4 files changed, 67 insertions(+), 17 deletions(-)
 create mode 100644 lib/types/types.c

diff --git a/discover/platform.c b/discover/platform.c
index 7275a5f..404f475 100644
--- a/discover/platform.c
+++ b/discover/platform.c
@@ -17,23 +17,6 @@ static struct config	*config;
 
 static const char *kernel_cmdline_debug = "petitboot.debug";
 
-static const char *device_type_name(enum device_type type)
-{
-	switch (type) {
-	case DEVICE_TYPE_DISK:
-		return "disk";
-	case DEVICE_TYPE_OPTICAL:
-		return "optical";
-	case DEVICE_TYPE_NETWORK:
-		return "network";
-	case DEVICE_TYPE_ANY:
-		return "any";
-	case DEVICE_TYPE_UNKNOWN:
-	default:
-		return "unknown";
-	}
-}
-
 static void dump_config(struct config *config)
 {
 	unsigned int i;
diff --git a/lib/Makefile.am b/lib/Makefile.am
index fbf2ee2..b39cc9b 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -38,6 +38,7 @@ lib_libpbcore_la_SOURCES = \
 	lib/pb-config/pb-config.h \
 	lib/process/process.c \
 	lib/process/process.h \
+	lib/types/types.c \
 	lib/types/types.h \
 	lib/talloc/talloc.c \
 	lib/talloc/talloc.h \
diff --git a/lib/types/types.c b/lib/types/types.c
new file mode 100644
index 0000000..059e52a
--- /dev/null
+++ b/lib/types/types.c
@@ -0,0 +1,51 @@
+#include <string.h>
+#include <types/types.h>
+#include <i18n/i18n.h>
+
+const char *device_type_display_name(enum device_type type)
+{
+	switch (type) {
+	case DEVICE_TYPE_DISK:
+		return _("Disk");
+	case DEVICE_TYPE_OPTICAL:
+		return _("Optical");
+	case DEVICE_TYPE_NETWORK:
+		return _("Network");
+	case DEVICE_TYPE_ANY:
+		return _("Any");
+	case DEVICE_TYPE_UNKNOWN:
+	default:
+		return _("Unknown");
+	}
+}
+
+const char *device_type_name(enum device_type type)
+{
+	switch (type) {
+	case DEVICE_TYPE_DISK:
+		return "disk";
+	case DEVICE_TYPE_OPTICAL:
+		return "optical";
+	case DEVICE_TYPE_NETWORK:
+		return "network";
+	case DEVICE_TYPE_ANY:
+		return "any";
+	case DEVICE_TYPE_UNKNOWN:
+	default:
+		return "unknown";
+	}
+}
+
+enum device_type find_device_type(const char *str)
+{
+	if (!strncmp(str, "disk", strlen("disk")))
+		return DEVICE_TYPE_DISK;
+	if (!strncmp(str, "optical", strlen("optical")))
+		return DEVICE_TYPE_OPTICAL;
+	if (!strncmp(str, "network", strlen("network")))
+		return DEVICE_TYPE_NETWORK;
+	if (!strncmp(str, "any", strlen("any")))
+		return DEVICE_TYPE_ANY;
+
+	return DEVICE_TYPE_UNKNOWN;
+}
diff --git a/lib/types/types.h b/lib/types/types.h
index f543b7f..e22dbc3 100644
--- a/lib/types/types.h
+++ b/lib/types/types.h
@@ -13,6 +13,10 @@ enum device_type {
 	DEVICE_TYPE_UNKNOWN,
 };
 
+const char *device_type_display_name(enum device_type type);
+const char *device_type_name(enum device_type type);
+enum device_type find_device_type(const char *str);
+
 struct device {
 	char		*id;
 	enum device_type type;
@@ -118,6 +122,17 @@ struct boot_priority {
 	enum device_type	type;
 };
 
+struct autoboot_option {
+	enum {
+		BOOT_DEVICE_TYPE,
+		BOOT_DEVICE_UUID
+	} boot_type;
+	union {
+		enum device_type	type;
+		char			*uuid;
+	};
+};
+
 struct config {
 	bool			autoboot_enabled;
 	unsigned int		autoboot_timeout_sec;
-- 
1.9.3



More information about the Petitboot mailing list