2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include "flatdevtree_env.h"
22 /* Definitions used by the flattened device tree */
23 #define OF_DT_HEADER 0xd00dfeed /* marker */
24 #define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
25 #define OF_DT_END_NODE 0x2 /* End node */
26 #define OF_DT_PROP 0x3 /* Property: name off, size, content */
27 #define OF_DT_NOP 0x4 /* nop */
30 #define OF_DT_VERSION 0x10
32 struct boot_param_header {
33 u32 magic; /* magic word OF_DT_HEADER */
34 u32 totalsize; /* total size of DT block */
35 u32 off_dt_struct; /* offset to structure */
36 u32 off_dt_strings; /* offset to strings */
37 u32 off_mem_rsvmap; /* offset to memory reserve map */
38 u32 version; /* format version */
39 u32 last_comp_version; /* last compatible version */
40 /* version 2 fields below */
41 u32 boot_cpuid_phys; /* Physical CPU id we're booting on */
42 /* version 3 fields below */
43 u32 dt_strings_size; /* size of the DT strings block */
63 #define FT_MAX_DEPTH 50
66 struct boot_param_header *bph;
67 int max_size; /* maximum size of tree */
68 int isordered; /* everything in standard order */
69 void *(*realloc)(void *, unsigned long);
71 char *p; /* current insertion point in structs */
72 struct ft_region rgn[FT_N_REGION];
73 void *genealogy[FT_MAX_DEPTH+1];
75 unsigned int node_max;
76 unsigned int nodes_used;
79 int ft_begin_node(struct ft_cxt *cxt, const char *name);
80 void ft_end_node(struct ft_cxt *cxt);
82 void ft_begin_tree(struct ft_cxt *cxt);
83 void ft_end_tree(struct ft_cxt *cxt);
85 void ft_nop(struct ft_cxt *cxt);
86 int ft_prop(struct ft_cxt *cxt, const char *name,
87 const void *data, unsigned int sz);
88 int ft_prop_str(struct ft_cxt *cxt, const char *name, const char *str);
89 int ft_prop_int(struct ft_cxt *cxt, const char *name, unsigned int val);
90 void ft_begin(struct ft_cxt *cxt, void *blob, unsigned int max_size,
91 void *(*realloc_fn)(void *, unsigned long));
92 int ft_open(struct ft_cxt *cxt, void *blob, unsigned int max_size,
93 unsigned int max_find_device,
94 void *(*realloc_fn)(void *, unsigned long));
95 int ft_add_rsvmap(struct ft_cxt *cxt, u64 physaddr, u64 size);
97 void ft_dump_blob(const void *bphp);
98 void ft_merge_blob(struct ft_cxt *cxt, void *blob);
99 void *ft_find_device(struct ft_cxt *cxt, const char *srch_path);
100 void *ft_find_device_rel(struct ft_cxt *cxt, const void *top,
101 const char *srch_path);
102 void *ft_find_descendent(struct ft_cxt *cxt, void *top, const char *srch_path);
103 int ft_get_prop(struct ft_cxt *cxt, const void *phandle, const char *propname,
104 void *buf, const unsigned int buflen);
105 int ft_set_prop(struct ft_cxt *cxt, const void *phandle, const char *propname,
106 const void *buf, const unsigned int buflen);
107 void *ft_get_parent(struct ft_cxt *cxt, const void *phandle);
108 void *ft_find_node_by_prop_value(struct ft_cxt *cxt, const void *prev,
109 const char *propname, const char *propval,
111 void *ft_create_node(struct ft_cxt *cxt, const void *parent, const char *name);
113 #endif /* FLATDEVTREE_H */