X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=lib%2Flibfdt%2Ffdt.c;h=154e9a4461794dc9ec7271e1b61cda38703626b9;hb=31bf0f57b2c322500ceccdc6a38b4a8edb7035f0;hp=4157b21efda2eb11585a0e1bf08d94cd8e754a24;hpb=1902692aa0b2dcbb9351172be03c57d1e82447e4;p=u-boot diff --git a/lib/libfdt/fdt.c b/lib/libfdt/fdt.c index 4157b21efd..154e9a4461 100644 --- a/lib/libfdt/fdt.c +++ b/lib/libfdt/fdt.c @@ -96,7 +96,7 @@ const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len) uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset) { - const uint32_t *tagp, *lenp; + const fdt32_t *tagp, *lenp; uint32_t tag; int offset = startoffset; const char *p; @@ -202,6 +202,34 @@ int fdt_next_node(const void *fdt, int offset, int *depth) return offset; } +int fdt_first_subnode(const void *fdt, int offset) +{ + int depth = 0; + + offset = fdt_next_node(fdt, offset, &depth); + if (offset < 0 || depth != 1) + return -FDT_ERR_NOTFOUND; + + return offset; +} + +int fdt_next_subnode(const void *fdt, int offset) +{ + int depth = 1; + + /* + * With respect to the parent, the depth of the next subnode will be + * the same as the last. + */ + do { + offset = fdt_next_node(fdt, offset, &depth); + if (offset < 0 || depth < 1) + return -FDT_ERR_NOTFOUND; + } while (depth > 1); + + return offset; +} + const char *_fdt_find_string(const char *strtab, int tabsize, const char *s) { int len = strlen(s) + 1;