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 char *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 void *top
,
100 const char *srch_path
);
101 void *ft_find_descendent(struct ft_cxt
*cxt
, void *top
, const char *srch_path
);
102 int ft_get_prop(struct ft_cxt
*cxt
, const void *phandle
, const char *propname
,
103 void *buf
, const unsigned int buflen
);
104 int ft_set_prop(struct ft_cxt
*cxt
, const void *phandle
, const char *propname
,
105 const void *buf
, const unsigned int buflen
);
106 void *ft_get_parent(struct ft_cxt
*cxt
, const void *phandle
);
107 void *ft_find_node_by_prop_value(struct ft_cxt
*cxt
, const void *prev
,
108 const char *propname
, const char *propval
,
110 void *ft_create_node(struct ft_cxt
*cxt
, const void *parent
, const char *name
);
111 char *ft_get_path(struct ft_cxt
*cxt
, const void *phandle
, char *buf
, int len
);
113 #endif /* FLATDEVTREE_H */