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