Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:09

0001 /*
0002  * Copyright (c) 2006 Jakub Jermar
0003  * All rights reserved.
0004  *
0005  * Redistribution and use in source and binary forms, with or without
0006  * modification, are permitted provided that the following conditions
0007  * are met:
0008  *
0009  * - Redistributions of source code must retain the above copyright
0010  *   notice, this list of conditions and the following disclaimer.
0011  * - Redistributions in binary form must reproduce the above copyright
0012  *   notice, this list of conditions and the following disclaimer in the
0013  *   documentation and/or other materials provided with the distribution.
0014  * - The name of the author may not be used to endorse or promote products
0015  *   derived from this software without specific prior written permission.
0016  *
0017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 #ifndef KERN_OFW_TREE_H_
0030 #define KERN_OFW_TREE_H_
0031 
0032 #include <arch/types.h>
0033 #include <typedefs.h>
0034 
0035 #define OFW_TREE_PROPERTY_MAX_NAMELEN  32
0036 
0037 /** Memory representation of OpenFirmware device tree node property. */
0038 typedef struct {
0039     char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
0040     size_t size;
0041     void *value;
0042 } ofw_tree_property_t;
0043 
0044 /** Memory representation of OpenFirmware device tree node. */
0045 typedef struct ofw_tree_node {
0046     struct ofw_tree_node *parent;
0047     struct ofw_tree_node *peer;
0048     struct ofw_tree_node *child;
0049     
0050     uint32_t node_handle;           /**< Old OpenFirmware node handle. */
0051     
0052     char *da_name;                  /**< Disambigued name. */
0053     
0054     unsigned int properties;        /**< Number of properties. */
0055     ofw_tree_property_t *property;
0056     
0057     /**
0058      * Pointer to a structure representing respective device.
0059      * Its semantics is device dependent.
0060      */
0061     void *device;
0062 } ofw_tree_node_t;
0063 
0064 /* Walker for visiting OpenFirmware device tree nodes. */
0065 typedef bool (* ofw_tree_walker_t)(ofw_tree_node_t *, void *);
0066 
0067 extern void ofw_tree_init(ofw_tree_node_t *);
0068 extern void ofw_tree_print(void);
0069 
0070 extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
0071 extern ofw_tree_node_t *ofw_tree_lookup(const char *);
0072 extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *,
0073     const char *);
0074 extern void ofw_tree_walk_by_device_type(const char *, ofw_tree_walker_t,
0075     void *);
0076 
0077 extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *);
0078 extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *,
0079     const char *);
0080 
0081 extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *,
0082     const char *);
0083 extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *,
0084     const char *);
0085 extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *,
0086     uint32_t);
0087 
0088 #endif