]> Pileus Git - ~andy/linux/blobdiff - arch/sparc/kernel/prom_common.c
sparc: Move create_node() and friends into prom_common.c
[~andy/linux] / arch / sparc / kernel / prom_common.c
index 762056762b72af72abc5e7cd8ff330243f47f4a1..d3eddc76763d049fd2a7b1773b37684d43b0897f 100644 (file)
@@ -184,7 +184,7 @@ static struct property * __init build_one_prop(phandle node, char *prev,
        return p;
 }
 
-struct property * __init build_prop_list(phandle node)
+static struct property * __init build_prop_list(phandle node)
 {
        struct property *head, *tail;
 
@@ -201,3 +201,42 @@ struct property * __init build_prop_list(phandle node)
 
        return head;
 }
+
+static char * __init get_one_property(phandle node, const char *name)
+{
+       char *buf = "<NULL>";
+       int len;
+
+       len = prom_getproplen(node, name);
+       if (len > 0) {
+               buf = prom_early_alloc(len);
+               len = prom_getproperty(node, name, buf, len);
+       }
+
+       return buf;
+}
+
+struct device_node * __init create_node(phandle node,
+                                       struct device_node *parent)
+{
+       struct device_node *dp;
+
+       if (!node)
+               return NULL;
+
+       dp = prom_early_alloc(sizeof(*dp));
+       dp->unique_id = prom_unique_id++;
+       dp->parent = parent;
+
+       kref_init(&dp->kref);
+
+       dp->name = get_one_property(node, "name");
+       dp->type = get_one_property(node, "device_type");
+       dp->node = node;
+
+       /* Build interrupts later... */
+
+       dp->properties = build_prop_list(node);
+
+       return dp;
+}