Wrote a DTB node forward parser. Used as base for parsing resource and policy DTBs
authorJustin Sobota <jsobota@ti.com>
Sat, 1 Dec 2012 21:30:06 +0000 (16:30 -0500)
committerJustin Sobota <jsobota@ti.com>
Sat, 1 Dec 2012 21:30:06 +0000 (16:30 -0500)
src/rm.c

index e14884ba77a56d696f22a3f316fc142479c2e6cc..05370e5618d914369460cd598d98ff4169ec53ef 100644 (file)
--- a/src/rm.c
+++ b/src/rm.c
@@ -642,7 +642,7 @@ void Rm_transactionProcessor (Rm_Inst *rmInst, Rm_Transaction *transaction)
     }\r
 }\r
 \r
-void reverse_properties(void *fdt, int32_t offset)\r
+void get_property(void *fdt, int32_t offset)\r
 {\r
        int32_t len;\r
        const char *name;\r
@@ -696,51 +696,17 @@ void reverse_properties(void *fdt, int32_t offset)
 \r
        offset = fdt_next_property_offset(fdt, offset);\r
        if (offset >= 0)\r
-               reverse_properties(fdt, offset);\r
+               get_property(fdt, offset);\r
        else if (offset != -FDT_ERR_NOTFOUND)\r
                Rm_osalLog("Error traverse_properties fdt_next_property_offset: %d\n", offset);\r
 }\r
 \r
-void reverse_node(void *fdt, int32_t nodeOffset);\r
-\r
-void reverse_children(void *fdt, int32_t offset)\r
-{\r
-    const char *nodeName;\r
-       int32_t error;\r
-       int32_t nextOffset = offset;\r
-       int32_t depth = 1;\r
-\r
-       do {\r
-               char path[256];\r
-\r
-        nodeName = fdt_get_name(fdt, nextOffset, NULL);\r
-               error = fdt_get_path(fdt, nextOffset, path, sizeof(path));\r
-        if (error)\r
-            Rm_osalLog("Error reverse_children fdt_get_path: %d\n", error);\r
-        else\r
-            Rm_osalLog("Node path: %s with name %s\n", path, nodeName);\r
-\r
-\r
-               nextOffset = fdt_next_node(fdt, nextOffset, &depth);\r
-        if (error < 0)\r
-            Rm_osalLog("Error reverse_children fdt_next_node: %d\n", offset);\r
-        else\r
-            Rm_osalLog("Next node offset: %d with depth: %d\n", nextOffset, depth);\r
-       } while ((depth >= 0) && (depth != 1));\r
-\r
-       if (depth == 1)\r
-               reverse_children(fdt, nextOffset);\r
-\r
-       reverse_node(fdt, offset);\r
-}\r
-\r
-void reverse_node(void *fdt, int32_t nodeOffset)\r
+void get_node(void *fdt, int32_t nodeOffset, int32_t depth)\r
 {\r
        const char *nodeName = fdt_get_name(fdt, nodeOffset, NULL);\r
        char path[256];\r
        int32_t error;\r
        int32_t offset;\r
-       int32_t depth = 0;\r
 \r
        error = fdt_get_path(fdt, nodeOffset, path, sizeof(path));\r
     if (error)\r
@@ -751,28 +717,29 @@ void reverse_node(void *fdt, int32_t nodeOffset)
     /* Get the properties for the node if any exist */\r
        offset = fdt_first_property_offset(fdt, nodeOffset);\r
        if (offset >= 0)\r
-               reverse_properties(fdt, offset);\r
+               get_property(fdt, offset);\r
        else if (offset != -FDT_ERR_NOTFOUND)\r
                Rm_osalLog("Error traverse_node fdt_first_property_offset: %d\n", offset);\r
 \r
     /* Get the next node */\r
        offset = fdt_next_node(fdt, nodeOffset, &depth);\r
-    if (offset >= 0)\r
+    if ((offset >= 0) && (depth >= 0))\r
     {\r
         Rm_osalLog("Next node offset: %d with depth: %d\n", offset, depth);\r
+        get_node(fdt, offset, depth);\r
     }\r
-    else if (offset != -FDT_ERR_NOTFOUND)\r
+    else if (offset < 0)\r
         Rm_osalLog("Error traverse_node fdt_next_node: %d\n", offset);\r
 \r
-    if (depth == 1)\r
-        reverse_children(fdt, offset);\r
+    Rm_osalLog("Last node offset: %d and depth: %d\n", offset, depth);\r
 }\r
 \r
 void traverseFdt (void *fdt)\r
 {\r
     int32_t nodeOffset = 0;  /* offset starts at 0, beginning of tree */\r
+    int32_t startDepth = 0;  /* depth starts at 0, beginning of tree */\r
 \r
-    reverse_node(fdt, nodeOffset);\r
+    get_node(fdt, nodeOffset, startDepth);\r
 }\r
 \r
 \r