aboutsummaryrefslogtreecommitdiffstats
path: root/roms/skiboot/test/dt_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'roms/skiboot/test/dt_common.c')
-rw-r--r--roms/skiboot/test/dt_common.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/roms/skiboot/test/dt_common.c b/roms/skiboot/test/dt_common.c
new file mode 100644
index 000000000..98032c496
--- /dev/null
+++ b/roms/skiboot/test/dt_common.c
@@ -0,0 +1,59 @@
+// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
+/* Copyright 2015-2017 IBM Corp. */
+
+#include <skiboot.h>
+#include <stdlib.h>
+
+#include "../include/device.h"
+
+/* dump_dt() is used in hdata/test/hdata_to_dt.c and core/test/run-device.c
+ * this file is directly #included in both
+ */
+
+static void indent_num(unsigned indent)
+{
+ unsigned int i;
+
+ for (i = 0; i < indent; i++)
+ putc(' ', stdout);
+}
+
+static void dump_val(unsigned indent, const void *prop, size_t size)
+{
+ size_t i;
+ int width = 78 - indent;
+
+ for (i = 0; i < size; i++) {
+ printf("%02x", ((unsigned char *)prop)[i]);
+ width -= 2;
+ if(width < 2) {
+ printf("\n");
+ indent_num(indent);
+ width = 80 - indent;
+ }
+ }
+}
+
+void dump_dt(const struct dt_node *root, unsigned indent, bool show_props);
+
+void dump_dt(const struct dt_node *root, unsigned indent, bool show_props)
+{
+ const struct dt_node *i;
+ const struct dt_property *p;
+
+ indent_num(indent);
+ printf("node: %s\n", root->name);
+
+ if (show_props) {
+ list_for_each(&root->properties, p, list) {
+ indent_num(indent);
+ printf("prop: %s size: %zu val: ", p->name, p->len);
+ dump_val(indent, p->prop, p->len);
+ printf("\n");
+ }
+ }
+
+ list_for_each(&root->children, i, list)
+ dump_dt(i, indent + 2, show_props);
+}
+