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 2 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, write to the Free Software 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 19 */ 20 21 22#ifndef _TREE_H_ 23#define _TREE_H_ 24 25#ifndef INLINE_TREE 26#define INLINE_TREE 27#endif 28 29/* Constructing the device tree: 30 31 The initial device tree populated with devices and basic properties 32 is created using the function <<device_tree_add_parsed()>>. This 33 function parses a PSIM device specification and uses it to populate 34 the tree accordingly. 35 36 This function accepts a printf style formatted string as the 37 argument that describes the entry. Any properties or interrupt 38 connections added to a device tree using this function are marked 39 as having a permenant disposition. When the tree is (re) 40 initialized they will be restored to their initial value. 41 42 */ 43 44EXTERN_TREE\ 45(char*) tree_quote_property 46(const char *property_value); 47 48EXTERN_TREE\ 49(device *) tree_parse 50(device *root, 51 const char *fmt, 52 ...) __attribute__ ((format (printf, 2, 3))); 53 54 55INLINE_TREE\ 56(void) tree_usage 57(int verbose); 58 59INLINE_TREE\ 60(void) tree_print 61(device *root); 62 63INLINE_TREE\ 64(device_instance*) tree_instance 65(device *root, 66 const char *device_specifier); 67 68 69/* Tree traversal:: 70 71 The entire device tree can be traversed using the 72 <<device_tree_traverse()>> function. The traversal can be in 73 either pre- or postfix order. 74 75 */ 76 77typedef void (tree_traverse_function) 78 (device *device, 79 void *data); 80 81INLINE_DEVICE\ 82(void) tree_traverse 83(device *root, 84 tree_traverse_function *prefix, 85 tree_traverse_function *postfix, 86 void *data); 87 88 89/* Tree lookup:: 90 91 The function <<tree_find_device()>> will attempt to locate 92 the specified device within the tree. If the device is not found a 93 NULL device is returned. 94 95 */ 96 97INLINE_TREE\ 98(device *) tree_find_device 99(device *root, 100 const char *path); 101 102 103INLINE_TREE\ 104(const device_property *) tree_find_property 105(device *root, 106 const char *path_to_property); 107 108INLINE_TREE\ 109(int) tree_find_boolean_property 110(device *root, 111 const char *path_to_property); 112 113INLINE_TREE\ 114(signed_cell) tree_find_integer_property 115(device *root, 116 const char *path_to_property); 117 118INLINE_TREE\ 119(device_instance *) tree_find_ihandle_property 120(device *root, 121 const char *path_to_property); 122 123INLINE_TREE\ 124(const char *) tree_find_string_property 125(device *root, 126 const char *path_to_property); 127 128 129/* Initializing the created tree: 130 131 Once a device tree has been created the <<device_tree_init()>> 132 function is used to initialize it. The exact sequence of events 133 that occure during initialization are described separatly. 134 135 */ 136 137INLINE_TREE\ 138(void) tree_init 139(device *root, 140 psim *system); 141 142 143#endif /* _TREE_H_ */ 144