X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fplatform.c;h=74e2a82df3225519fdcc2ad49ebc3502214bda09;hp=0a221e295bb87a67992a6ccede556fe3e49271c2;hb=757d3ed67988099a279fa4f05f07ace8bb3f7596;hpb=4d5a57a73cbfa29ad2c8672f157294f733726f90 diff --git a/discover/platform.c b/discover/platform.c index 0a221e2..74e2a82 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; @@ -79,17 +62,18 @@ static void dump_config(struct config *config) for (i = 0; i < config->network.n_dns_servers; i++) pb_log(" dns server %s\n", config->network.dns_servers[i]); - if (config->boot_device) - pb_log(" boot device %s\n", config->boot_device); + for (i = 0; i < config->n_autoboot_opts; i++) { + if (config->autoboot_opts[i].boot_type == BOOT_DEVICE_TYPE) + pb_log(" boot device %d: %s\n", i, + device_type_name(config->autoboot_opts[i].type)); + else + pb_log(" boot device %d: uuid: %s\n", + i, config->autoboot_opts[i].uuid); + } - if (config->n_boot_priorities) - pb_log(" boot priority order:\n"); + pb_log(" IPMI boot device 0x%02x%s\n", config->ipmi_bootdev, + config->ipmi_bootdev_persistent ? " (persistent)" : ""); - for (i = 0; i < config->n_boot_priorities; i++) { - struct boot_priority *prio = &config->boot_priorities[i]; - pb_log(" %10s: %d\n", device_type_name(prio->type), - prio->priority); - } pb_log(" language: %s\n", config->lang ?: ""); } @@ -122,17 +106,19 @@ void config_set_defaults(struct config *config) config->network.n_interfaces = 0; 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, - config->n_boot_priorities); - config->boot_priorities[0].type = DEVICE_TYPE_NETWORK; - config->boot_priorities[0].priority = 2; - config->boot_priorities[1].type = DEVICE_TYPE_DISK; - config->boot_priorities[1].priority = 1; + config->n_autoboot_opts = 2; + config->autoboot_opts = talloc_array(config, struct autoboot_option, + config->n_autoboot_opts); + config->autoboot_opts[0].boot_type = BOOT_DEVICE_TYPE; + config->autoboot_opts[0].type = DEVICE_TYPE_NETWORK; + config->autoboot_opts[1].boot_type = BOOT_DEVICE_TYPE; + config->autoboot_opts[1].type = DEVICE_TYPE_ANY; + + config->ipmi_bootdev = 0; + config->ipmi_bootdev_persistent = false; config->debug = config_debug_on_cmdline(); } @@ -173,10 +159,12 @@ const struct platform *platform_get(void) return platform; } -void platform_finalise_config(void) +void platform_pre_boot(void) { - if (platform && platform->finalise_config) - platform->finalise_config(platform); + const struct config *config = config_get(); + + if (platform && config && platform->pre_boot) + platform->pre_boot(platform, config); } int platform_get_sysinfo(struct system_info *info)