text: /* The common simulator framework for GDB, the GNU Debugger.
  
     Copyright 2002, 2007, 2008 Free Software Foundation, Inc.
  
     Contributed by Andrew Cagney and Red Hat.
  
     This file is part of GDB.
  
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 3 of the License, or
     (at your option) any later version.
  
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
  
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
  
  
  #ifndef HW_TREE
  #define HW_TREE
  
  
  struct hw *hw_tree_create
  (SIM_DESC sd,
   const char *device);
  
  void hw_tree_delete
  (struct hw *root);
  
  struct hw *hw_tree_parse
  (struct hw *root,
   const char *fmt,
   ...) __attribute__ ((format (printf, 2, 3)));
  
  struct hw *hw_tree_vparse
  (struct hw *root,
   const char *fmt,
   va_list ap);
  
  
  void hw_tree_finish
  (struct hw *root);
  
  typedef void (hw_tree_print_callback)
       (void *,
        const char *fmt,
        ...);
  
  void hw_tree_print
  (struct hw *root,
   hw_tree_print_callback *print,
   void *file);
  
  
  /* Tree traversal::
  
     The entire device tree can be traversed using the
     <<device_tree_traverse()>> function.  The traversal can be in
     either prefix or postfix order.
  
     */
  
  typedef void (hw_tree_traverse_function)
       (struct hw *device,
        void *data);
  
  void hw_tree_traverse
  (struct hw *root,
   hw_tree_traverse_function *prefix,
   hw_tree_traverse_function *postfix,
   void *data);
  
  
  /* Tree lookup::
  
     The function <<hw_tree_find_device()>> will attempt to locate the
     specified device within the tree.  If the device is not found a
     NULL device is returned.
  
     */
  
  struct hw * hw_tree_find_device
  (struct hw *root,
   const char *path);
  
  
  const struct hw_property *hw_tree_find_property
  (struct hw *root,
   const char *path_to_property);
  
  int hw_tree_find_boolean_property
  (struct hw *root,
   const char *path_to_property);
  
  signed_cell hw_tree_find_integer_property
  (struct hw *root,
   const char *path_to_property);
  
  #if NOT_YET
  device_instance *hw_tree_find_ihandle_property
  (struct hw *root,
   const char *path_to_property);
  #endif
  
  const char *hw_tree_find_string_property
  (struct hw *root,
   const char *path_to_property);
  
  
  /* Perform a soft reset on the created tree. */
  
  void hw_tree_reset
  (struct hw *root);
  
  
  #endif
  