summaryrefslogtreecommitdiff
path: root/kexec/libfdt
diff options
context:
space:
mode:
authorWang Nan <wangnan0@huawei.com>2014-03-25 12:09:43 +0800
committerSimon Horman <horms@verge.net.au>2014-03-28 09:46:29 -0700
commit685d033f80fc860d27ac7627c029a3e483315d45 (patch)
tree6d903bc1f56aa816bb7257fd5e8f821b23730ca7 /kexec/libfdt
parent0d526445f3d3f26f50e674d75ceee344c31369f1 (diff)
downloadkexec-tools-685d033f80fc860d27ac7627c029a3e483315d45.tar.gz
Introduce helpers for computing dtb size
This patch introduce fdt_node_len and fdt_prop_len to help for computing memory requirement when operating dtb. Signed-off-by: Wang Nan <wangnan0@huawei.com> Acked-by: Dave Young <dyoung@redhat.com> Signed-off-by: Simon Horman <horms@verge.net.au>
Diffstat (limited to 'kexec/libfdt')
-rw-r--r--kexec/libfdt/libfdt.h24
-rw-r--r--kexec/libfdt/libfdt_internal.h3
2 files changed, 24 insertions, 3 deletions
diff --git a/kexec/libfdt/libfdt.h b/kexec/libfdt/libfdt.h
index ce80e4f..87a24ab 100644
--- a/kexec/libfdt/libfdt.h
+++ b/kexec/libfdt/libfdt.h
@@ -1073,4 +1073,28 @@ int fdt_del_node(void *fdt, int nodeoffset);
const char *fdt_strerror(int errval);
+#define FDT_ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
+#define FDT_TAGALIGN(x) (FDT_ALIGN((x), FDT_TAGSIZE))
+
+/*
+ * if add a new subnode:
+ * see: fdt_add_subnode -> fdt_add_subnode_namelen
+ */
+static inline int fdt_node_len(const char* node_name)
+{
+ return sizeof(struct fdt_node_header) +
+ FDT_TAGALIGN(strlen(node_name) + 1) + FDT_TAGSIZE;
+}
+
+/*
+ * if add a new prop: (assume prop_name not exist in strtab)
+ * see: fdt_setprop -> _fdt_add_property
+ */
+static inline int fdt_prop_len(const char* prop_name, int len)
+{
+ return (strlen(prop_name) + 1) +
+ sizeof(struct fdt_property) +
+ FDT_TAGALIGN(len);
+}
+
#endif /* _LIBFDT_H */
diff --git a/kexec/libfdt/libfdt_internal.h b/kexec/libfdt/libfdt_internal.h
index 46eb93e..7e6c4c8 100644
--- a/kexec/libfdt/libfdt_internal.h
+++ b/kexec/libfdt/libfdt_internal.h
@@ -52,9 +52,6 @@
*/
#include <fdt.h>
-#define FDT_ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
-#define FDT_TAGALIGN(x) (FDT_ALIGN((x), FDT_TAGSIZE))
-
#define FDT_CHECK_HEADER(fdt) \
{ \
int err; \