discover: Add support for multiple bootdev arguments
authorSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Wed, 21 Jan 2015 04:30:20 +0000 (15:30 +1100)
committerSamuel Mendoza-Jonas <sam.mj@au1.ibm.com>
Tue, 5 May 2015 05:03:27 +0000 (15:03 +1000)
To support multiple autoboot options while retaining backwards
compatability, interpret the petitboot,bootdev parameter as
optionally having several space-separated values.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
discover/platform-powerpc.c

index bda9368c939bc955d37a5bb6c9b3ae60173a22c5..895f0ecd73cc54ccea2420c037b26124f9a68076 100644 (file)
@@ -388,6 +388,47 @@ static void populate_network_config(struct platform_powerpc *platform,
        talloc_free(val);
 }
 
+static int read_bootdev(void *ctx, char **pos, struct autoboot_option *opt)
+{
+       char *delim = strchr(*pos, ' ');
+       int len, prefix = 0, rc = -1;
+       enum device_type type;
+
+       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) {
+                       opt->type = type;
+                       opt->boot_type = BOOT_DEVICE_TYPE;
+                       rc = 0;
+               }
+       }
+
+       if (opt->boot_type == BOOT_DEVICE_UUID) {
+               if (delim)
+                       len = (int)(delim - *pos) - prefix;
+               else
+                       len = strlen(*pos);
+
+               opt->uuid = talloc_strndup(ctx, *pos + prefix, len);
+       }
+
+       /* Always advance pointer to next option or end */
+       if (delim)
+               *pos = delim + 1;
+       else
+               *pos += strlen(*pos);
+
+       return rc;
+}
+
 static void populate_bootdev_config(struct platform_powerpc *platform,
                struct config *config)