diff options
author | Simon Glass <sjg@chromium.org> | 2016-02-22 22:55:39 -0700 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-03-14 14:19:11 -0400 |
commit | f8a2d7a4162d2c8ca6adbb1fe0ef7d2a9765c923 (patch) | |
tree | 34545d4396f01a984035300d3891b453466205d0 /lib | |
parent | cc7a64447bc3e90a8133b2fce98d7526089a7033 (diff) |
libfdt: Add a function to write a property placeholder
The existing function to add a new property to a tree being built requires
that the entire contents of the new property be passed in. For some
applications it is more convenient to be able to add the property contents
later, perhaps by reading from a file. This avoids double-buffering of the
contents.
Add a new function to support this and adust the existing fdt_property() to
use it.
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libfdt/fdt_sw.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/libfdt/fdt_sw.c b/lib/libfdt/fdt_sw.c index 320a914991a..345a3acbf8e 100644 --- a/lib/libfdt/fdt_sw.c +++ b/lib/libfdt/fdt_sw.c @@ -175,7 +175,7 @@ static int _fdt_find_add_string(void *fdt, const char *s) return offset; } -int fdt_property(void *fdt, const char *name, const void *val, int len) +int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp) { struct fdt_property *prop; int nameoff; @@ -193,7 +193,19 @@ int fdt_property(void *fdt, const char *name, const void *val, int len) prop->tag = cpu_to_fdt32(FDT_PROP); prop->nameoff = cpu_to_fdt32(nameoff); prop->len = cpu_to_fdt32(len); - memcpy(prop->data, val, len); + *valp = prop->data; + return 0; +} + +int fdt_property(void *fdt, const char *name, const void *val, int len) +{ + void *ptr; + int ret; + + ret = fdt_property_placeholder(fdt, name, len, &ptr); + if (ret) + return ret; + memcpy(ptr, val, len); return 0; } |