Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/include/ofw/ofw_tree.h

    r965dc18 re731b0d  
    3131
    3232#include <arch/types.h>
    33 #include <ddi/irq.h>
    3433#include <typedefs.h>
    3534
    36 #define OFW_TREE_PROPERTY_MAX_NAMELEN   32
     35#define OFW_TREE_PROPERTY_MAX_NAMELEN  32
    3736
    38 typedef struct ofw_tree_node ofw_tree_node_t;
    39 typedef struct ofw_tree_property ofw_tree_property_t;
     37/** Memory representation of OpenFirmware device tree node property. */
     38typedef struct {
     39        char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
     40        size_t size;
     41        void *value;
     42} ofw_tree_property_t;
    4043
    4144/** Memory representation of OpenFirmware device tree node. */
    42 struct ofw_tree_node {
    43         ofw_tree_node_t *parent;
    44         ofw_tree_node_t *peer;
    45         ofw_tree_node_t *child;
    46 
    47         uint32_t node_handle;           /**< Old OpenFirmware node handle. */
    48 
    49         char *da_name;                  /**< Disambigued name. */
    50 
    51         unsigned properties;            /**< Number of properties. */
     45typedef struct ofw_tree_node {
     46        struct ofw_tree_node *parent;
     47        struct ofw_tree_node *peer;
     48        struct ofw_tree_node *child;
     49       
     50        uint32_t node_handle;           /**< Old OpenFirmware node handle. */
     51       
     52        char *da_name;                  /**< Disambigued name. */
     53       
     54        unsigned int properties;        /**< Number of properties. */
    5255        ofw_tree_property_t *property;
    5356       
     
    5760         */
    5861        void *device;
    59 };
     62} ofw_tree_node_t;
    6063
    61 /** Memory representation of OpenFirmware device tree node property. */
    62 struct ofw_tree_property {
    63         char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
    64         size_t size;
    65         void *value;
    66 };
    67 
    68 /*
    69  * Definition of 'reg' and 'ranges' properties for various buses.
    70  */
    71  
    72 struct ofw_fhc_reg {
    73         uint64_t addr;
    74         uint32_t size;
    75 } __attribute__ ((packed));
    76 typedef struct ofw_fhc_reg ofw_fhc_reg_t;
    77                        
    78 struct ofw_fhc_range {
    79         uint64_t child_base;
    80         uint64_t parent_base;
    81         uint32_t size;
    82 } __attribute__ ((packed));
    83 typedef struct ofw_fhc_range ofw_fhc_range_t;
    84 
    85 struct ofw_central_reg {
    86         uint64_t addr;
    87         uint32_t size;
    88 } __attribute__ ((packed));
    89 typedef struct ofw_central_reg ofw_central_reg_t;
    90 
    91 struct ofw_central_range {
    92         uint64_t child_base;
    93         uint64_t parent_base;
    94         uint32_t size;
    95 } __attribute__ ((packed));
    96 typedef struct ofw_central_range ofw_central_range_t;
    97 
    98 struct ofw_ebus_reg {
    99         uint32_t space;
    100         uint32_t addr;
    101         uint32_t size;
    102 } __attribute__ ((packed));
    103 typedef struct ofw_ebus_reg ofw_ebus_reg_t;
    104 
    105 struct ofw_ebus_range {
    106         uint32_t child_space;
    107         uint32_t child_base;
    108         uint32_t parent_space;
    109         uint64_t parent_base;   /* group phys.mid and phys.lo together */
    110         uint32_t size;
    111 } __attribute__ ((packed));
    112 typedef struct ofw_ebus_range ofw_ebus_range_t;
    113 
    114 struct ofw_ebus_intr_map {
    115         uint32_t space;
    116         uint32_t addr;
    117         uint32_t intr;
    118         uint32_t controller_handle;
    119         uint32_t controller_ino;
    120 } __attribute__ ((packed));
    121 typedef struct ofw_ebus_intr_map ofw_ebus_intr_map_t;
    122 
    123 struct ofw_ebus_intr_mask {
    124         uint32_t space_mask;
    125         uint32_t addr_mask;
    126         uint32_t intr_mask;
    127 } __attribute__ ((packed));
    128 typedef struct ofw_ebus_intr_mask ofw_ebus_intr_mask_t;
    129 
    130 struct ofw_pci_reg {
    131         uint32_t space;         /* needs to be masked to obtain pure space id */
    132         uint64_t addr;          /* group phys.mid and phys.lo together */
    133         uint64_t size;
    134 } __attribute__ ((packed));
    135 typedef struct ofw_pci_reg ofw_pci_reg_t;
    136 
    137 struct ofw_pci_range {
    138         uint32_t space;
    139         uint64_t child_base;    /* group phys.mid and phys.lo together */
    140         uint64_t parent_base;
    141         uint64_t size;
    142 } __attribute__ ((packed));
    143 typedef struct ofw_pci_range ofw_pci_range_t;
    144 
    145 struct ofw_sbus_reg {
    146         uint64_t addr;
    147         uint32_t size;
    148 } __attribute__ ((packed));
    149 typedef struct ofw_sbus_reg ofw_sbus_reg_t;
    150 
    151 struct ofw_sbus_range {
    152         uint64_t child_base;
    153         uint64_t parent_base;
    154         uint32_t size;
    155 } __attribute__ ((packed));
    156 typedef struct ofw_sbus_range ofw_sbus_range_t;
    157 
    158 struct ofw_upa_reg {
    159         uint64_t addr;
    160         uint64_t size;
    161 } __attribute__ ((packed));
    162 typedef struct ofw_upa_reg ofw_upa_reg_t;
     64/* Walker for visiting OpenFirmware device tree nodes. */
     65typedef bool (* ofw_tree_walker_t)(ofw_tree_node_t *, void *);
    16366
    16467extern void ofw_tree_init(ofw_tree_node_t *);
    16568extern void ofw_tree_print(void);
     69
    16670extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
    16771extern ofw_tree_node_t *ofw_tree_lookup(const char *);
    16872extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *,
    16973    const char *);
     74extern void ofw_tree_walk_by_device_type(const char *, ofw_tree_walker_t,
     75    void *);
     76
    17077extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *);
    17178extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *,
    17279    const char *);
     80
    17381extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *,
    17482    const char *);
    175 extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *node,
    176     const char *name);
     83extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *,
     84    const char *);
    17785extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *,
    17886    uint32_t);
    17987
    180 extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *, ofw_fhc_reg_t *,
    181     uintptr_t *);
    182 extern bool ofw_central_apply_ranges(ofw_tree_node_t *, ofw_central_reg_t *,
    183     uintptr_t *);
    184 extern bool ofw_ebus_apply_ranges(ofw_tree_node_t *, ofw_ebus_reg_t *,
    185     uintptr_t *);
    186 extern bool ofw_pci_apply_ranges(ofw_tree_node_t *, ofw_pci_reg_t *,
    187     uintptr_t *);
    188 extern bool ofw_sbus_apply_ranges(ofw_tree_node_t *, ofw_sbus_reg_t *,
    189     uintptr_t *);
    190 extern bool ofw_upa_apply_ranges(ofw_tree_node_t *, ofw_upa_reg_t *,
    191     uintptr_t *);
    192 
    193 extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *, ofw_pci_reg_t *,
    194     ofw_pci_reg_t *);
    195 
    196 extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *,
    197     uint32_t, int *, cir_t *, void **);
    198 extern bool ofw_ebus_map_interrupt(ofw_tree_node_t *, ofw_ebus_reg_t *,
    199     uint32_t, int *, cir_t *, void **);
    200 extern bool ofw_pci_map_interrupt(ofw_tree_node_t *, ofw_pci_reg_t *,
    201     int, int *, cir_t *, void **);
    202 
    20388#endif
Note: See TracChangeset for help on using the changeset viewer.