Changes in kernel/genarch/include/ofw/ofw_tree.h [965dc18:e731b0d] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/include/ofw/ofw_tree.h
r965dc18 re731b0d 31 31 32 32 #include <arch/types.h> 33 #include <ddi/irq.h>34 33 #include <typedefs.h> 35 34 36 #define OFW_TREE_PROPERTY_MAX_NAMELEN 35 #define OFW_TREE_PROPERTY_MAX_NAMELEN 32 37 36 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. */ 38 typedef struct { 39 char name[OFW_TREE_PROPERTY_MAX_NAMELEN]; 40 size_t size; 41 void *value; 42 } ofw_tree_property_t; 40 43 41 44 /** 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; 48 49 char *da_name; 50 51 unsigned properties;/**< Number of properties. */45 typedef 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. */ 52 55 ofw_tree_property_t *property; 53 56 … … 57 60 */ 58 61 void *device; 59 } ;62 } ofw_tree_node_t; 60 63 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. */ 65 typedef bool (* ofw_tree_walker_t)(ofw_tree_node_t *, void *); 163 66 164 67 extern void ofw_tree_init(ofw_tree_node_t *); 165 68 extern void ofw_tree_print(void); 69 166 70 extern const char *ofw_tree_node_name(const ofw_tree_node_t *); 167 71 extern ofw_tree_node_t *ofw_tree_lookup(const char *); 168 72 extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *, 169 73 const char *); 74 extern void ofw_tree_walk_by_device_type(const char *, ofw_tree_walker_t, 75 void *); 76 170 77 extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *); 171 78 extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *, 172 79 const char *); 80 173 81 extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *, 174 82 const char *); 175 extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t * node,176 const char * name);83 extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *, 84 const char *); 177 85 extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *, 178 86 uint32_t); 179 87 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 203 88 #endif
Note:
See TracChangeset
for help on using the changeset viewer.