diff options
Diffstat (limited to 'scripts/dtc/dtc.h')
| -rw-r--r-- | scripts/dtc/dtc.h | 77 | 
1 files changed, 38 insertions, 39 deletions
| diff --git a/scripts/dtc/dtc.h b/scripts/dtc/dtc.h index 08d54c87008..f37c97eb3df 100644 --- a/scripts/dtc/dtc.h +++ b/scripts/dtc/dtc.h @@ -34,7 +34,17 @@  #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 */ | 
