aboutsummaryrefslogtreecommitdiff
path: root/device_tree.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2012-09-23 08:37:59 +0200
committerAlexander Graf <agraf@suse.de>2012-10-05 02:35:11 +0200
commit711934334eb3895a89c555c1f57eb3d84ddb2906 (patch)
tree205011ec755ca752920cf26652949c42d9cdad6e /device_tree.c
parent011aba24ed73000e126dd1bb90a6bea2afd91649 (diff)
downloadqemu-711934334eb3895a89c555c1f57eb3d84ddb2906.zip
qemu-711934334eb3895a89c555c1f57eb3d84ddb2906.tar.gz
qemu-711934334eb3895a89c555c1f57eb3d84ddb2906.tar.bz2
fdt: move dumpdtb interpretation code to device_tree.c
The dumpdtb code can be useful in more places than just for e500. Move it to a generic place. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'device_tree.c')
-rw-r--r--device_tree.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/device_tree.c b/device_tree.c
index d7a9b6b..69ca953 100644
--- a/device_tree.c
+++ b/device_tree.c
@@ -304,3 +304,25 @@ int qemu_devtree_add_subnode(void *fdt, const char *name)
g_free(dupname);
return retval;
}
+
+void qemu_devtree_dumpdtb(void *fdt, int size)
+{
+ QemuOpts *machine_opts;
+
+ machine_opts = qemu_opts_find(qemu_find_opts("machine"), 0);
+ if (machine_opts) {
+ const char *dumpdtb = qemu_opt_get(machine_opts, "dumpdtb");
+ if (dumpdtb) {
+ /* Dump the dtb to a file and quit */
+ FILE *f = fopen(dumpdtb, "wb");
+ size_t len;
+ len = fwrite(fdt, size, 1, f);
+ fclose(f);
+ if (len != size) {
+ exit(1);
+ }
+ exit(0);
+ }
+ }
+
+}