]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/sparc/kernel/prom_common.c
sparc64: Call dump_stack() in die_nmi().
[mv-sheeva.git] / arch / sparc / kernel / prom_common.c
index 3b5de2f3fcd1db7290b03c72133d748ee7e873d7..ff7b591c8946d1ad5f849f0956e4452037f78e66 100644 (file)
 
 #include "prom.h"
 
+struct device_node *of_console_device;
+EXPORT_SYMBOL(of_console_device);
+
+char *of_console_path;
+EXPORT_SYMBOL(of_console_path);
+
+char *of_console_options;
+EXPORT_SYMBOL(of_console_options);
+
 struct device_node *of_find_node_by_phandle(phandle handle)
 {
        struct device_node *np;
@@ -146,20 +155,12 @@ static struct property * __init build_one_prop(phandle node, char *prev,
                p->value = prom_early_alloc(special_len);
                memcpy(p->value, special_val, special_len);
        } else {
-#ifdef CONFIG_SPARC32
-               if (prev == NULL) {
-                       name = prom_firstprop(node, NULL);
-               } else {
-                       name = prom_nextprop(node, prev, NULL);
-               }
-#else
                if (prev == NULL) {
-                       prom_firstprop(node, p->name);
+                       name = prom_firstprop(node, p->name);
                } else {
-                       prom_nextprop(node, prev, p->name);
+                       name = prom_nextprop(node, prev, p->name);
                }
-               name = p->name;
-#endif
+
                if (strlen(name) == 0) {
                        tmp = p;
                        return NULL;
@@ -216,8 +217,8 @@ static char * __init get_one_property(phandle node, const char *name)
        return buf;
 }
 
-struct device_node * __init prom_create_node(phandle node,
-                                            struct device_node *parent)
+static struct device_node * __init prom_create_node(phandle node,
+                                                   struct device_node *parent)
 {
        struct device_node *dp;
 
@@ -234,10 +235,10 @@ struct device_node * __init prom_create_node(phandle node,
        dp->type = get_one_property(node, "device_type");
        dp->node = node;
 
-       /* Build interrupts later... */
-
        dp->properties = build_prop_list(node);
 
+       irq_trans_init(dp);
+
        return dp;
 }
 
@@ -261,9 +262,9 @@ static char * __init build_full_name(struct device_node *dp)
        return n;
 }
 
-struct device_node * __init prom_build_tree(struct device_node *parent,
-                                           phandle node,
-                                           struct device_node ***nextp)
+static struct device_node * __init prom_build_tree(struct device_node *parent,
+                                                  phandle node,
+                                                  struct device_node ***nextp)
 {
        struct device_node *ret = NULL, *prev_sibling = NULL;
        struct device_node *dp;
@@ -293,3 +294,25 @@ struct device_node * __init prom_build_tree(struct device_node *parent,
 
        return ret;
 }
+
+unsigned int prom_early_allocated __initdata;
+
+void __init prom_build_devicetree(void)
+{
+       struct device_node **nextp;
+
+       allnodes = prom_create_node(prom_root_node, NULL);
+       allnodes->path_component_name = "";
+       allnodes->full_name = "/";
+
+       nextp = &allnodes->allnext;
+       allnodes->child = prom_build_tree(allnodes,
+                                         prom_getchild(allnodes->node),
+                                         &nextp);
+       of_console_init();
+
+       printk("PROM: Built device tree with %u bytes of memory.\n",
+              prom_early_allocated);
+
+       of_fill_in_cpu_data();
+}