X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fplatform-powerpc.c;h=b5ad682eae3b9e7136de412602648a8ee72b8510;hp=77e8824269e138717c345389dcf0beadf33a61cb;hb=d0602ed25e3bff8298c19bece8cd8b3f80d86624;hpb=a055f6714fd06aa3b633b1bc44a8dbf42a0eedb0;ds=sidebyside diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c index 77e8824..b5ad682 100644 --- a/discover/platform-powerpc.c +++ b/discover/platform-powerpc.c @@ -53,7 +53,6 @@ static const char *known_params[] = { "auto-boot?", "petitboot,network", "petitboot,timeout", - "petitboot,bootdev", "petitboot,bootdevs", "petitboot,language", "petitboot,debug?", @@ -68,9 +67,6 @@ static const char *known_params[] = { #define to_platform_powerpc(p) \ (struct platform_powerpc *)(p->platform_data) -/* a partition max a max size of 64k * 16bytes = 1M */ -static const int max_partition_size = 64 * 1024 * 16; - static bool param_is_known(const char *param, unsigned int len) { const char *known_param; @@ -414,11 +410,9 @@ static int read_bootdev(void *ctx, char **pos, struct autoboot_option *opt) if (!strncmp(*pos, "uuid:", strlen("uuid:"))) { prefix = strlen("uuid:"); opt->boot_type = BOOT_DEVICE_UUID; - rc = 0; } else if (!strncmp(*pos, "mac:", strlen("mac:"))) { prefix = strlen("mac:"); opt->boot_type = BOOT_DEVICE_UUID; - rc = 0; } else { type = find_device_type(*pos); if (type != DEVICE_TYPE_UNKNOWN) { @@ -432,9 +426,12 @@ static int read_bootdev(void *ctx, char **pos, struct autoboot_option *opt) if (delim) len = (int)(delim - *pos) - prefix; else - len = strlen(*pos); + len = strlen(*pos) - prefix; - opt->uuid = talloc_strndup(ctx, *pos + prefix, len); + if (len) { + opt->uuid = talloc_strndup(ctx, *pos + prefix, len); + rc = 0; + } } /* Always advance pointer to next option or end */ @@ -450,22 +447,9 @@ static void populate_bootdev_config(struct platform_powerpc *platform, struct config *config) { struct autoboot_option *opt, *new = NULL; - char *pos, *end, *old_dev = NULL; + char *pos, *end; unsigned int n_new = 0; const char *val; - bool conflict; - - /* Check for old-style bootdev */ - val = get_param(platform, "petitboot,bootdev"); - if (val && strlen(val)) { - pos = talloc_strdup(config, val); - if (!strncmp(val, "uuid:", strlen("uuid:"))) - old_dev = talloc_strdup(config, - val + strlen("uuid:")); - else if (!strncmp(val, "mac:", strlen("mac:"))) - old_dev = talloc_strdup(config, - val + strlen("mac:")); - } /* Check for ordered bootdevs */ val = get_param(platform, "petitboot,bootdevs"); @@ -494,7 +478,7 @@ static void populate_bootdev_config(struct platform_powerpc *platform, } - if (!n_new && !old_dev) { + if (!n_new) { /* If autoboot has been disabled, clear the default options */ if (!config->autoboot_enabled) { talloc_free(config->autoboot_opts); @@ -503,28 +487,9 @@ static void populate_bootdev_config(struct platform_powerpc *platform, return; } - conflict = old_dev && (!n_new || - new[0].boot_type == BOOT_DEVICE_TYPE || - /* Canonical UUIDs are 36 characters long */ - strncmp(new[0].uuid, old_dev, 36)); - - if (!conflict) { - talloc_free(config->autoboot_opts); - config->autoboot_opts = new; - config->n_autoboot_opts = n_new; - return; - } - - /* - * Difference detected, defer to old format in case it has been updated - * recently - */ - pb_debug("Old autoboot bootdev detected\n"); talloc_free(config->autoboot_opts); - config->autoboot_opts = talloc(config, struct autoboot_option); - config->autoboot_opts[0].boot_type = BOOT_DEVICE_UUID; - config->autoboot_opts[0].uuid = talloc_strdup(config, old_dev); - config->n_autoboot_opts = 1; + config->autoboot_opts = new; + config->n_autoboot_opts = n_new; } static void set_proxy_variables(struct config *config) @@ -697,18 +662,13 @@ static void update_network_config(struct platform_powerpc *platform, static void update_bootdev_config(struct platform_powerpc *platform, struct config *config) { - char *val = NULL, *boot_str = NULL, *tmp = NULL, *first = NULL; + char *val = NULL, *boot_str = NULL, *tmp = NULL; struct autoboot_option *opt; const char delim = ' '; unsigned int i; if (!config->n_autoboot_opts) - first = val = ""; - else if (config->autoboot_opts[0].boot_type == BOOT_DEVICE_UUID) - first = talloc_asprintf(config, "uuid:%s", - config->autoboot_opts[0].uuid); - else - first = ""; + val = ""; for (i = 0; i < config->n_autoboot_opts; i++) { opt = &config->autoboot_opts[i]; @@ -727,7 +687,6 @@ static void update_bootdev_config(struct platform_powerpc *platform, } update_string_config(platform, "petitboot,bootdevs", val); - update_string_config(platform, "petitboot,bootdev", first); talloc_free(tmp); if (boot_str) talloc_free(boot_str); @@ -796,21 +755,8 @@ static void set_ipmi_bootdev(struct config *config, enum ipmi_bootdev bootdev, config->ipmi_bootdev = bootdev; config->ipmi_bootdev_persistent = persistent; - switch (bootdev) { - case IPMI_BOOTDEV_NONE: - case IPMI_BOOTDEV_DISK: - case IPMI_BOOTDEV_NETWORK: - case IPMI_BOOTDEV_CDROM: - default: - break; - case IPMI_BOOTDEV_SETUP: - config->autoboot_enabled = false; - break; - case IPMI_BOOTDEV_SAFE: - config->autoboot_enabled = false; + if (bootdev == IPMI_BOOTDEV_SAFE) config->safe_mode = true; - break; - } } static int read_bootdev_sysparam(const char *name, uint8_t *val)