aboutsummaryrefslogtreecommitdiff
path: root/common/fdt.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2021-10-11 13:58:11 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2021-10-11 13:58:11 +0300
commit091463c1057f50b47156a138d7d1dbd09494a6d5 (patch)
tree954bc11974362f5a856a20e6d7d8b0b451d35fa5 /common/fdt.c
parentd2ff961a2a08229e1f2245e8dba9b2275016133c (diff)
downloadkmi-091463c1057f50b47156a138d7d1dbd09494a6d5.tar.gz
kmi-091463c1057f50b47156a138d7d1dbd09494a6d5.zip
Moved some functions to common/
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));
+}