aboutsummaryrefslogtreecommitdiff
path: root/common/fdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/fdt.c')
-rw-r--r--common/fdt.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/common/fdt.c b/common/fdt.c
new file mode 100644
index 0000000..c554b25
--- /dev/null
+++ b/common/fdt.c
@@ -0,0 +1,24 @@
+#include <libfdt.h>
+
+struct cell_info_t get_cellinfo(void *fdt, int offset)
+{
+ return (struct cell_info_t){
+ fdt_size_cells(fdt, offset),
+ fdt_address_cells(fdt, offset)
+ };
+}
+
+/* how "reg" is interpreted depends on the parent node */
+struct cell_info_t get_reginfo(void *fdt, const char *path)
+{
+ const char *i = strrchr(path, '/');
+ if(!i)
+ return (struct cell_info_t){0, 0};
+
+ size_t baselen = i - path;
+ if(i == 0)
+ /* root node */
+ baselen = 1;
+
+ return get_cellinfo(fdt, fdt_path_offset_namelen(fdt, path, baselen));
+}