On Wed, 2012-06-06 at 01:52 +0200, Alexander Graf wrote: > We want to get rid of the concept of loading an external device tree and > instead > generate our own. However, to do this we need to also create a device tree > template programatically. > > This patch adds a helper to create an empty device tree in memory. > > Signed-off-by: Alexander Graf <ag...@suse.de>
Reviewed-by: Peter Crosthwaite <peter.crosthwa...@petalogix.com> > --- > device_tree.c | 37 +++++++++++++++++++++++++++++++++++++ > device_tree.h | 1 + > 2 files changed, 38 insertions(+), 0 deletions(-) > > diff --git a/device_tree.c b/device_tree.c > index 6745d17..d4f1f0a 100644 > --- a/device_tree.c > +++ b/device_tree.c > @@ -25,6 +25,43 @@ > > #include <libfdt.h> > > +#define FDT_MAX_SIZE 0x10000 > + > +void *create_device_tree(int *sizep) > +{ > + void *fdt; > + int ret; > + > + *sizep = FDT_MAX_SIZE; > + fdt = g_malloc0(FDT_MAX_SIZE); > + ret = fdt_create(fdt, FDT_MAX_SIZE); > + if (ret < 0) { > + goto fail; > + } > + ret = fdt_begin_node(fdt, ""); > + if (ret < 0) { > + goto fail; > + } > + ret = fdt_end_node(fdt); > + if (ret < 0) { > + goto fail; > + } > + ret = fdt_finish(fdt); > + if (ret < 0) { > + goto fail; > + } > + ret = fdt_open_into(fdt, fdt, *sizep); > + if (ret) { > + fprintf(stderr, "Unable to copy device tree in memory\n"); > + exit(1); > + } > + > + return fdt; > +fail: > + fprintf(stderr, "%s Couldn't create dt: %s\n", __func__, > fdt_strerror(ret)); > + exit(1); > +} > + > void *load_device_tree(const char *filename_path, int *sizep) > { > int dt_size; > diff --git a/device_tree.h b/device_tree.h > index 376287a..5464dc7 100644 > --- a/device_tree.h > +++ b/device_tree.h > @@ -14,6 +14,7 @@ > #ifndef __DEVICE_TREE_H__ > #define __DEVICE_TREE_H__ > > +void *create_device_tree(int *sizep); > void *load_device_tree(const char *filename_path, int *sizep); > > int qemu_devtree_setprop(void *fdt, const char *node_path,