Index: kernel/genarch/src/ofw/ofw_tree.c
===================================================================
--- kernel/genarch/src/ofw/ofw_tree.c	(revision 8d2760fe0365099552ec91e6cee8c5bbd55ed273)
+++ kernel/genarch/src/ofw/ofw_tree.c	(revision 925fdd733dae7788ed336c64b416c799a73fefb8)
@@ -55,10 +55,12 @@
 /** Get OpenFirmware node property.
  *
- * @param node Node in which to lookup the property.
- * @param name Name of the property.
- *
- * @return Pointer to the property structure or NULL if no such property.
- */
-ofw_tree_property_t *ofw_tree_getprop(const ofw_tree_node_t *node, const char *name)
+ * @param node		Node in which to lookup the property.
+ * @param name		Name of the property.
+ *
+ * @return		Pointer to the property structure or NULL if no such
+ * 			property.
+ */
+ofw_tree_property_t *
+ofw_tree_getprop(const ofw_tree_node_t *node, const char *name)
 {
 	unsigned int i;
@@ -74,7 +76,7 @@
 /** Return value of the 'name' property.
  *
- * @param node Node of interest.
- *
- * @return Value of the 'name' property belonging to the node.
+ * @param node		Node of interest.
+ *
+ * @return		Value of the 'name' property belonging to the node.
  */
 const char *ofw_tree_node_name(const ofw_tree_node_t *node)
@@ -94,8 +96,9 @@
 /** Lookup child of given name.
  *
- * @param node Node whose child is being looked up.
- * @param name Name of the child being looked up.
- *
- * @return NULL if there is no such child or pointer to the matching child node.
+ * @param node		Node whose child is being looked up.
+ * @param name		Name of the child being looked up.
+ *
+ * @return		NULL if there is no such child or pointer to the
+ * 			matching child node.
  */
 ofw_tree_node_t *ofw_tree_find_child(ofw_tree_node_t *node, const char *name)
@@ -128,10 +131,12 @@
 /** Lookup first child of given device type.
  *
- * @param node Node whose child is being looked up.
- * @param name Device type of the child being looked up.
- *
- * @return NULL if there is no such child or pointer to the matching child node.
- */
-ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *node, const char *name)
+ * @param node		Node whose child is being looked up.
+ * @param name		Device type of the child being looked up.
+ *
+ * @return		NULL if there is no such child or pointer to the
+ * 			matching child node.
+ */
+ofw_tree_node_t *
+ofw_tree_find_child_by_device_type(ofw_tree_node_t *node, const char *name)
 {
 	ofw_tree_node_t *cur;
@@ -154,10 +159,12 @@
  * are looked up iteratively to avoid stack overflow.
  *
- * @param root Root of the searched subtree.
- * @param handle OpenFirmware handle.
- *
- * @return NULL if there is no such node or pointer to the matching node.
- */
-ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *root, uint32_t handle)
+ * @param root		Root of the searched subtree.
+ * @param handle	OpenFirmware handle.
+ *
+ * @return		NULL if there is no such node or pointer to the matching
+ * 			node.
+ */
+ofw_tree_node_t *
+ofw_tree_find_node_by_handle(ofw_tree_node_t *root, uint32_t handle)
 {
 	ofw_tree_node_t *cur;
@@ -181,10 +188,12 @@
 /** Lookup first peer of given device type.
  *
- * @param node Node whose peer is being looked up.
- * @param name Device type of the child being looked up.
- *
- * @return NULL if there is no such child or pointer to the matching child node.
- */
-ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *node, const char *name)
+ * @param node		Node whose peer is being looked up.
+ * @param name		Device type of the child being looked up.
+ *
+ * @return		NULL if there is no such child or pointer to the
+ * 			matching child node.
+ */
+ofw_tree_node_t *
+ofw_tree_find_peer_by_device_type(ofw_tree_node_t *node, const char *name)
 {
 	ofw_tree_node_t *cur;
@@ -203,13 +212,39 @@
 
 
+/** Lookup first peer of given name.
+ *
+ * @param node		Node whose peer is being looked up.
+ * @param name		Name of the child being looked up.
+ *
+ * @return		NULL if there is no such peer or pointer to the matching
+ * 			peer node.
+ */
+ofw_tree_node_t *
+ofw_tree_find_peer_by_name(ofw_tree_node_t *node, const char *name)
+{
+	ofw_tree_node_t *cur;
+	ofw_tree_property_t *prop;
+	
+	for (cur = node->peer; cur; cur = cur->peer) {
+		prop = ofw_tree_getprop(cur, "name");
+		if (!prop || !prop->value)
+			continue;
+		if (strcmp(prop->value, name) == 0)
+			return cur;
+	}
+			
+	return NULL;
+}
+
 /** Lookup OpenFirmware node by its path.
  *
- * @param path Path to the node.
- *
- * @return NULL if there is no such node or pointer to the leaf node.
+ * @param path		Path to the node.
+ *
+ * @return		NULL if there is no such node or pointer to the leaf
+ * 			node.
  */
 ofw_tree_node_t *ofw_tree_lookup(const char *path)
 {
-	char buf[NAME_BUF_LEN+1];
+	char buf[NAME_BUF_LEN + 1];
 	ofw_tree_node_t *node = ofw_root;
 	index_t i, j;
@@ -237,6 +272,6 @@
  * iteratively in order to avoid stack overflow.
  *
- * @param node Root of the subtree.
- * @param path Current path, NULL for the very root of the entire tree.
+ * @param node		Root of the subtree.
+ * @param path		Current path, NULL for the very root of the entire tree.
  */
 static void ofw_tree_node_print(const ofw_tree_node_t *node, const char *path)
