diff options
Diffstat (limited to 'roms/skiboot/test/dt_common.c')
-rw-r--r-- | roms/skiboot/test/dt_common.c | 59 |
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); +} + |