X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fplatform.c;h=418b9ea1d68f0cdae48ded8a086680d061645199;hp=93f25c357ad1ddbb16675d799be85d7421a185b2;hb=a58de4840edd7796c385c11a6d49ce28c724b305;hpb=2bb12a3b0f27af0d1724d2d58abdb877835289fa diff --git a/discover/platform.c b/discover/platform.c index 93f25c3..418b9ea 100644 --- a/discover/platform.c +++ b/discover/platform.c @@ -1,7 +1,11 @@ +#define _GNU_SOURCE + +#include #include #include +#include #include #include @@ -11,6 +15,8 @@ void *platform_ctx; static struct platform *platform; static struct config *config; +static const char *kernel_cmdline_debug = "petitboot.debug"; + static const char *device_type_name(enum device_type type) { switch (type) { @@ -81,6 +87,27 @@ static void dump_config(struct config *config) pb_log(" %10s: %d\n", device_type_name(prio->type), prio->priority); } + + pb_log(" language: %s\n", config->lang ?: ""); +} + +static bool config_debug_on_cmdline(void) +{ + char buf[600]; + int rc, fd; + + fd = open("/proc/cmdline", O_RDONLY); + if (fd < 0) + return false; + + rc = read(fd, buf, sizeof(buf)); + close(fd); + + if (rc <= 0) + return false; + + return memmem(buf, rc, kernel_cmdline_debug, + strlen(kernel_cmdline_debug)) != NULL; } void config_set_defaults(struct config *config) @@ -93,6 +120,8 @@ void config_set_defaults(struct config *config) config->network.dns_servers = NULL; config->network.n_dns_servers = 0; config->boot_device = NULL; + config->safe_mode = false; + config->lang = NULL; config->n_boot_priorities = 2; config->boot_priorities = talloc_array(config, struct boot_priority, @@ -101,6 +130,8 @@ void config_set_defaults(struct config *config) config->boot_priorities[0].priority = 2; config->boot_priorities[1].type = DEVICE_TYPE_DISK; config->boot_priorities[1].priority = 1; + + config->debug = config_debug_on_cmdline(); } int platform_init(void *ctx) @@ -139,6 +170,13 @@ const struct platform *platform_get(void) return platform; } +int platform_get_sysinfo(struct system_info *info) +{ + if (platform && platform->get_sysinfo) + return platform->get_sysinfo(platform, info); + return -1; +} + int config_set(struct config *newconfig) { int rc;