Home | History | Annotate | Line # | Download | only in ppc
      1 /*  This file is part of the program psim.
      2 
      3     Copyright (C) 1994-1996, Andrew Cagney <cagney (at) 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 permanent 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_PRINTF_2;
     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