Browse Source

fdt: add a size method

hax
Wesley W. Terpstra 9 years ago
parent
commit
a1a5cbcacb
  1. 10
      machine/fdt.c
  2. 1
      machine/fdt.h

10
machine/fdt.c

@ -68,6 +68,16 @@ void fdt_scan(uintptr_t fdt, fdt_cb cb, void *extra)
fdt_scan_helper(lex, strings, "/", 0, cb, extra);
}
uint32_t fdt_size(uintptr_t fdt)
{
struct fdt_header *header = (struct fdt_header *)fdt;
// Only process FDT that we understand
if (bswap(header->magic) != FDT_MAGIC ||
bswap(header->last_comp_version) > FDT_VERSION) return 0;
return bswap(header->totalsize);
}
const uint32_t *fdt_get_address(const struct fdt_scan_node *node, const uint32_t *value, uintptr_t *result)
{
*result = 0;

1
machine/fdt.h

@ -41,6 +41,7 @@ struct fdt_scan_prop {
// Scan the contents of FDT
typedef void (*fdt_cb)(const struct fdt_scan_prop *prop, void *extra);
void fdt_scan(uintptr_t fdt, fdt_cb cb, void *extra);
uint32_t fdt_size(uintptr_t fdt);
// Extract fields
const uint32_t *fdt_get_address(const struct fdt_scan_node *node, const uint32_t *base, uintptr_t *value);

Loading…
Cancel
Save