xref: /netbsd/external/gpl3/gdb.old/dist/sim/ppc/tree.h (revision 6ca2c52a)
1 /*  This file is part of the program psim.
2 
3     Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>
4 
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 3 of the License, or
8     (at your option) any later version.
9 
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14 
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, see <http://www.gnu.org/licenses/>.
17 
18     */
19 
20 
21 #ifndef _TREE_H_
22 #define _TREE_H_
23 
24 #ifndef INLINE_TREE
25 #define INLINE_TREE
26 #endif
27 
28 /* Constructing the device tree:
29 
30    The initial device tree populated with devices and basic properties
31    is created using the function <<device_tree_add_parsed()>>.  This
32    function parses a PSIM device specification and uses it to populate
33    the tree accordingly.
34 
35    This function accepts a printf style formatted string as the
36    argument that describes the entry.  Any properties or interrupt
37    connections added to a device tree using this function are marked
38    as having a permenant disposition.  When the tree is (re)
39    initialized they will be restored to their initial value.
40 
41    */
42 
43 EXTERN_TREE\
44 (char*) tree_quote_property
45 (const char *property_value);
46 
47 EXTERN_TREE\
48 (device *) tree_parse
49 (device *root,
50  const char *fmt,
51  ...) __attribute__ ((format (printf, 2, 3)));
52 
53 
54 INLINE_TREE\
55 (void) tree_usage
56 (int verbose);
57 
58 INLINE_TREE\
59 (void) tree_print
60 (device *root);
61 
62 INLINE_TREE\
63 (device_instance*) tree_instance
64 (device *root,
65  const char *device_specifier);
66 
67 
68 /* Tree traversal::
69 
70    The entire device tree can be traversed using the
71    <<device_tree_traverse()>> function.  The traversal can be in
72    either pre- or postfix order.
73 
74    */
75 
76 typedef void (tree_traverse_function)
77      (device *device,
78       void *data);
79 
80 INLINE_DEVICE\
81 (void) tree_traverse
82 (device *root,
83  tree_traverse_function *prefix,
84  tree_traverse_function *postfix,
85  void *data);
86 
87 
88 /* Tree lookup::
89 
90    The function <<tree_find_device()>> will attempt to locate
91    the specified device within the tree.  If the device is not found a
92    NULL device is returned.
93 
94    */
95 
96 INLINE_TREE\
97 (device *) tree_find_device
98 (device *root,
99  const char *path);
100 
101 
102 INLINE_TREE\
103 (const device_property *) tree_find_property
104 (device *root,
105  const char *path_to_property);
106 
107 INLINE_TREE\
108 (int) tree_find_boolean_property
109 (device *root,
110  const char *path_to_property);
111 
112 INLINE_TREE\
113 (signed_cell) tree_find_integer_property
114 (device *root,
115  const char *path_to_property);
116 
117 INLINE_TREE\
118 (device_instance *) tree_find_ihandle_property
119 (device *root,
120  const char *path_to_property);
121 
122 INLINE_TREE\
123 (const char *) tree_find_string_property
124 (device *root,
125  const char *path_to_property);
126 
127 
128 /* Initializing the created tree:
129 
130    Once a device tree has been created the <<device_tree_init()>>
131    function is used to initialize it.  The exact sequence of events
132    that occure during initialization are described separatly.
133 
134    */
135 
136 INLINE_TREE\
137 (void) tree_init
138 (device *root,
139  psim *system);
140 
141 
142 #endif /* _TREE_H_ */
143