]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - scripts/dtc/dtc.h
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / scripts / dtc / dtc.h
index 08d54c8700863a84ab08c26ef699af4bce99c431..f37c97eb3dfc2ca1694e6c3a2bb053949faa12e5 100644 (file)
 #include <libfdt_env.h>
 #include <fdt.h>
 
+#include "util.h"
+
+#ifdef DEBUG
+#define debug(fmt,args...)     printf(fmt, ##args)
+#else
+#define debug(fmt,args...)
+#endif
+
+
 #define DEFAULT_FDT_VERSION    17
+
 /*
  * Command line options
  */
@@ -42,36 +52,11 @@ extern int quiet;           /* Level of quietness */
 extern int reservenum;         /* Number of memory reservation slots */
 extern int minsize;            /* Minimum blob size */
 extern int padsize;            /* Additional padding to blob */
+extern int phandle_format;     /* Use linux,phandle or phandle properties */
 
-static inline void __attribute__((noreturn)) die(char * str, ...)
-{
-       va_list ap;
-
-       va_start(ap, str);
-       fprintf(stderr, "FATAL ERROR: ");
-       vfprintf(stderr, str, ap);
-       exit(1);
-}
-
-static inline void *xmalloc(size_t len)
-{
-       void *new = malloc(len);
-
-       if (! new)
-               die("malloc() failed\n");
-
-       return new;
-}
-
-static inline void *xrealloc(void *p, size_t len)
-{
-       void *new = realloc(p, len);
-
-       if (! new)
-               die("realloc() failed (len=%d)\n", len);
-
-       return new;
-}
+#define PHANDLE_LEGACY 0x1
+#define PHANDLE_EPAPR  0x2
+#define PHANDLE_BOTH   0x3
 
 typedef uint32_t cell_t;
 
@@ -140,13 +125,18 @@ int data_is_one_string(struct data d);
 #define MAX_NODENAME_LEN       31
 
 /* Live trees */
+struct label {
+       char *label;
+       struct label *next;
+};
+
 struct property {
        char *name;
        struct data val;
 
        struct property *next;
 
-       char *label;
+       struct label *labels;
 };
 
 struct node {
@@ -163,22 +153,28 @@ struct node {
        cell_t phandle;
        int addr_cells, size_cells;
 
-       char *label;
+       struct label *labels;
 };
 
+#define for_each_label(l0, l) \
+       for ((l) = (l0); (l); (l) = (l)->next)
+
 #define for_each_property(n, p) \
        for ((p) = (n)->proplist; (p); (p) = (p)->next)
 
 #define for_each_child(n, c)   \
        for ((c) = (n)->children; (c); (c) = (c)->next_sibling)
 
-struct property *build_property(char *name, struct data val, char *label);
+void add_label(struct label **labels, char *label);
+
+struct property *build_property(char *name, struct data val);
 struct property *chain_property(struct property *first, struct property *list);
 struct property *reverse_properties(struct property *first);
 
 struct node *build_node(struct property *proplist, struct node *children);
-struct node *name_node(struct node *node, char *name, char *label);
+struct node *name_node(struct node *node, char *name);
 struct node *chain_node(struct node *first, struct node *list);
+struct node *merge_nodes(struct node *old_node, struct node *new_node);
 
 void add_property(struct node *node, struct property *prop);
 void add_child(struct node *parent, struct node *child);
@@ -186,6 +182,10 @@ void add_child(struct node *parent, struct node *child);
 const char *get_unitname(struct node *node);
 struct property *get_property(struct node *node, const char *propname);
 cell_t propval_cell(struct property *prop);
+struct property *get_property_by_label(struct node *tree, const char *label,
+                                      struct node **node);
+struct marker *get_marker_label(struct node *tree, const char *label,
+                               struct node **node, struct property **prop);
 struct node *get_subnode(struct node *node, const char *nodename);
 struct node *get_node_by_path(struct node *tree, const char *path);
 struct node *get_node_by_label(struct node *tree, const char *label);
@@ -193,6 +193,8 @@ struct node *get_node_by_phandle(struct node *tree, cell_t phandle);
 struct node *get_node_by_ref(struct node *tree, const char *ref);
 cell_t get_node_phandle(struct node *root, struct node *node);
 
+uint32_t guess_boot_cpuid(struct node *tree);
+
 /* Boot info (tree plus memreserve information */
 
 struct reserve_info {
@@ -200,10 +202,10 @@ struct reserve_info {
 
        struct reserve_info *next;
 
-       char *label;
+       struct label *labels;
 };
 
-struct reserve_info *build_reserve_entry(uint64_t start, uint64_t len, char *label);
+struct reserve_info *build_reserve_entry(uint64_t start, uint64_t len);
 struct reserve_info *chain_reserve_entry(struct reserve_info *first,
                                         struct reserve_info *list);
 struct reserve_info *add_reserve_entry(struct reserve_info *list,
@@ -218,6 +220,7 @@ struct boot_info {
 
 struct boot_info *build_boot_info(struct reserve_info *reservelist,
                                  struct node *tree, uint32_t boot_cpuid_phys);
+void sort_tree(struct boot_info *bi);
 
 /* Checks */
 
@@ -239,8 +242,4 @@ struct boot_info *dt_from_source(const char *f);
 
 struct boot_info *dt_from_fs(const char *dirname);
 
-/* misc */
-
-char *join_path(const char *path, const char *name);
-
 #endif /* _DTC_H */