]> git.ozlabs.org Git - petitboot/blobdiff - discover/kboot-parser.c
discover: remove register_parser printf
[petitboot] / discover / kboot-parser.c
index 884658e8d07bcd6da655fb536bf13d56f27aad85..9d0322de39280e0f66a28ad9f783c419afbc12ae 100644 (file)
@@ -21,6 +21,7 @@ static void kboot_process_pair(struct conf_context *conf, const char *name,
        char *args;
        const char *initrd;
        const char *root;
+       const char *dtb;
 
        /* ignore bare values */
 
@@ -45,10 +46,12 @@ static void kboot_process_pair(struct conf_context *conf, const char *name,
        opt->id = talloc_asprintf(opt, "%s#%s", conf->dc->device->device->id,
                        name);
        opt->name = talloc_strdup(opt, name);
+       d_opt->option = opt;
 
        args = talloc_strdup(opt, "");
        initrd = conf_get_global_option(conf, "initrd");
        root = conf_get_global_option(conf, "root");
+       dtb = conf_get_global_option(conf, "dtb");
 
        pos = strchr(value, ' ');
 
@@ -78,12 +81,17 @@ static void kboot_process_pair(struct conf_context *conf, const char *name,
                        continue;
                }
 
+               if (streq(cl_name, "dtb")) {
+                       dtb = cl_value;
+                       continue;
+               }
+
                args = talloc_asprintf_append(args, "%s=%s ", cl_name,
                        cl_value);
        }
 
 out_add:
-       d_opt->boot_image = create_devpath_resource(opt,
+       d_opt->boot_image = create_devpath_resource(d_opt,
                                conf->dc->device, value);
 
        if (root) {
@@ -92,15 +100,22 @@ out_add:
        } else
                opt->boot_args = args;
 
+       opt->description = talloc_asprintf(opt, "%s %s", value,
+                       opt->boot_args);
+
        if (initrd) {
-               d_opt->initrd = create_devpath_resource(opt,
+               d_opt->initrd = create_devpath_resource(d_opt,
                                conf->dc->device, initrd);
+               opt->description = talloc_asprintf_append(opt->description,
+                               " initrd=%s", initrd);
+       }
 
-               opt->description = talloc_asprintf(opt, "%s initrd=%s %s",
-                       value, initrd, opt->boot_args);
-       } else
-               opt->description = talloc_asprintf(opt, "%s %s", value,
-                       opt->boot_args);
+       if (dtb) {
+               d_opt->dtb = create_devpath_resource(d_opt,
+                               conf->dc->device, dtb);
+               opt->description = talloc_asprintf_append(opt->description,
+                               " dtb=%s", dtb);
+       }
 
        conf_strip_str(opt->boot_args);
        conf_strip_str(opt->description);
@@ -109,6 +124,7 @@ out_add:
 }
 
 static struct conf_global_option kboot_global_options[] = {
+       { .name = "dtb" },
        { .name = "initrd" },
        { .name = "root" },
        { .name = "video" },
@@ -159,6 +175,7 @@ static int kboot_parse(struct discover_context *dc, char *buf, int len)
 
 static struct parser kboot_parser = {
        .name                   = "kboot",
+       .method                 = CONF_METHOD_LOCAL_FILE,
        .parse                  = kboot_parse,
        .filenames              = kboot_conf_files,
        .resolve_resource       = resolve_devpath_resource,