Index: kernel/genarch/include/ofw/ofw_tree.h
===================================================================
--- kernel/genarch/include/ofw/ofw_tree.h	(revision 824d6dddcd9e05937c7f5d5ce284d4d07c63718b)
+++ kernel/genarch/include/ofw/ofw_tree.h	(revision e5792d16c0e117f023535f0c311c1c3f35c80b0e)
@@ -31,23 +31,26 @@
 
 #include <arch/types.h>
-#include <ddi/irq.h>
 #include <typedefs.h>
 
-#define OFW_TREE_PROPERTY_MAX_NAMELEN	32
+#define OFW_TREE_PROPERTY_MAX_NAMELEN  32
 
-typedef struct ofw_tree_node ofw_tree_node_t;
-typedef struct ofw_tree_property ofw_tree_property_t;
+/** Memory representation of OpenFirmware device tree node property. */
+typedef struct {
+	char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
+	size_t size;
+	void *value;
+} ofw_tree_property_t;
 
 /** Memory representation of OpenFirmware device tree node. */
-struct ofw_tree_node {
-	ofw_tree_node_t *parent;
-	ofw_tree_node_t *peer;
-	ofw_tree_node_t *child;
-
-	uint32_t node_handle;		/**< Old OpenFirmware node handle. */
-
-	char *da_name;			/**< Disambigued name. */
-
-	unsigned properties;		/**< Number of properties. */
+typedef struct ofw_tree_node {
+	struct ofw_tree_node *parent;
+	struct ofw_tree_node *peer;
+	struct ofw_tree_node *child;
+	
+	uint32_t node_handle;           /**< Old OpenFirmware node handle. */
+	
+	char *da_name;                  /**< Disambigued name. */
+	
+	unsigned int properties;        /**< Number of properties. */
 	ofw_tree_property_t *property;
 	
@@ -57,147 +60,29 @@
 	 */
 	void *device;
-};
+} ofw_tree_node_t;
 
-/** Memory representation of OpenFirmware device tree node property. */
-struct ofw_tree_property {
-	char name[OFW_TREE_PROPERTY_MAX_NAMELEN];
-	size_t size;
-	void *value;
-};
-
-/*
- * Definition of 'reg' and 'ranges' properties for various buses.
- */
- 
-struct ofw_fhc_reg {
-	uint64_t addr;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_fhc_reg ofw_fhc_reg_t;
-			
-struct ofw_fhc_range {
-	uint64_t child_base;
-	uint64_t parent_base;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_fhc_range ofw_fhc_range_t;
-
-struct ofw_central_reg {
-	uint64_t addr;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_central_reg ofw_central_reg_t;
-
-struct ofw_central_range {
-	uint64_t child_base;
-	uint64_t parent_base;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_central_range ofw_central_range_t;
-
-struct ofw_ebus_reg {
-	uint32_t space;
-	uint32_t addr;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_ebus_reg ofw_ebus_reg_t;
-
-struct ofw_ebus_range {
-	uint32_t child_space;
-	uint32_t child_base;
-	uint32_t parent_space;
-	uint64_t parent_base;	/* group phys.mid and phys.lo together */
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_ebus_range ofw_ebus_range_t;
-
-struct ofw_ebus_intr_map {
-	uint32_t space;
-	uint32_t addr;
-	uint32_t intr;
-	uint32_t controller_handle;
-	uint32_t controller_ino;
-} __attribute__ ((packed));
-typedef struct ofw_ebus_intr_map ofw_ebus_intr_map_t;
-
-struct ofw_ebus_intr_mask {
-	uint32_t space_mask;
-	uint32_t addr_mask;
-	uint32_t intr_mask;
-} __attribute__ ((packed));
-typedef struct ofw_ebus_intr_mask ofw_ebus_intr_mask_t;
-
-struct ofw_pci_reg {
-	uint32_t space;		/* needs to be masked to obtain pure space id */
-	uint64_t addr;		/* group phys.mid and phys.lo together */
-	uint64_t size;
-} __attribute__ ((packed));
-typedef struct ofw_pci_reg ofw_pci_reg_t;
-
-struct ofw_pci_range {
-	uint32_t space;
-	uint64_t child_base;	/* group phys.mid and phys.lo together */
-	uint64_t parent_base;
-	uint64_t size;
-} __attribute__ ((packed));
-typedef struct ofw_pci_range ofw_pci_range_t;
-
-struct ofw_sbus_reg {
-	uint64_t addr;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_sbus_reg ofw_sbus_reg_t;
-
-struct ofw_sbus_range {
-	uint64_t child_base;
-	uint64_t parent_base;
-	uint32_t size;
-} __attribute__ ((packed));
-typedef struct ofw_sbus_range ofw_sbus_range_t;
-
-struct ofw_upa_reg {
-	uint64_t addr;
-	uint64_t size;
-} __attribute__ ((packed));
-typedef struct ofw_upa_reg ofw_upa_reg_t;
+/* Walker for visiting OpenFirmware device tree nodes. */
+typedef bool (* ofw_tree_walker_t)(ofw_tree_node_t *, void *);
 
 extern void ofw_tree_init(ofw_tree_node_t *);
 extern void ofw_tree_print(void);
+
 extern const char *ofw_tree_node_name(const ofw_tree_node_t *);
 extern ofw_tree_node_t *ofw_tree_lookup(const char *);
 extern ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *,
     const char *);
+extern void ofw_tree_walk_by_device_type(const char *, ofw_tree_walker_t,
+    void *);
+
 extern ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *, const char *);
 extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *,
     const char *);
+
 extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *,
     const char *);
-extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *node,
-    const char *name);
+extern ofw_tree_node_t *ofw_tree_find_peer_by_name(ofw_tree_node_t *,
+    const char *);
 extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *,
     uint32_t);
 
-extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *, ofw_fhc_reg_t *,
-    uintptr_t *);
-extern bool ofw_central_apply_ranges(ofw_tree_node_t *, ofw_central_reg_t *,
-    uintptr_t *);
-extern bool ofw_ebus_apply_ranges(ofw_tree_node_t *, ofw_ebus_reg_t *,
-    uintptr_t *);
-extern bool ofw_pci_apply_ranges(ofw_tree_node_t *, ofw_pci_reg_t *,
-    uintptr_t *);
-extern bool ofw_sbus_apply_ranges(ofw_tree_node_t *, ofw_sbus_reg_t *,
-    uintptr_t *);
-extern bool ofw_upa_apply_ranges(ofw_tree_node_t *, ofw_upa_reg_t *,
-    uintptr_t *);
-
-extern bool ofw_pci_reg_absolutize(ofw_tree_node_t *, ofw_pci_reg_t *,
-    ofw_pci_reg_t *);
-
-extern bool ofw_fhc_map_interrupt(ofw_tree_node_t *, ofw_fhc_reg_t *,
-    uint32_t, int *, cir_t *, void **);
-extern bool ofw_ebus_map_interrupt(ofw_tree_node_t *, ofw_ebus_reg_t *,
-    uint32_t, int *, cir_t *, void **);
-extern bool ofw_pci_map_interrupt(ofw_tree_node_t *, ofw_pci_reg_t *,
-    int, int *, cir_t *, void **);
-
 #endif
