]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Start split out of common open firmware code
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 1 May 2007 06:26:07 +0000 (16:26 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 20 Jul 2007 03:28:41 +0000 (13:28 +1000)
This creates drivers/of/base.c (depending on CONFIG_OF) and puts
the first trivially common bits from the prom.c files into it.

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Acked-by: Paul Mackerras <paulus@samba.org>
Acked-by: David S. Miller <davem@davemloft.net>
12 files changed:
arch/powerpc/Kconfig
arch/powerpc/kernel/prom.c
arch/sparc/Kconfig
arch/sparc/kernel/prom.c
arch/sparc64/Kconfig
arch/sparc64/kernel/prom.c
drivers/Makefile
drivers/of/Makefile [new file with mode: 0644]
drivers/of/base.c [new file with mode: 0644]
include/asm-powerpc/prom.h
include/asm-sparc/prom.h
include/asm-sparc64/prom.h

index d860b640a1405572285413efb922b8253046b835..853c282da22eadb59032f50983295d48f28f90e0 100644 (file)
@@ -92,6 +92,9 @@ config ARCH_MAY_HAVE_PC_FDC
 config PPC_OF
        def_bool y
 
 config PPC_OF
        def_bool y
 
+config OF
+       def_bool y
+
 config PPC_UDBG_16550
        bool
        default n
 config PPC_UDBG_16550
        bool
        default n
index 37ff99bd98b45ac892cab67a839b4110d68e26dd..6c9419a4d70ad531ad37e7e5062cf3b226728bac 100644 (file)
@@ -1056,35 +1056,6 @@ void __init early_init_devtree(void *params)
        DBG(" <- early_init_devtree()\n");
 }
 
        DBG(" <- early_init_devtree()\n");
 }
 
-int of_n_addr_cells(struct device_node* np)
-{
-       const int *ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#address-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #address-cells property for the root node, default to 1 */
-       return 1;
-}
-EXPORT_SYMBOL(of_n_addr_cells);
-
-int of_n_size_cells(struct device_node* np)
-{
-       const int* ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#size-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #size-cells property for the root node, default to 1 */
-       return 1;
-}
-EXPORT_SYMBOL(of_n_size_cells);
 
 /** Checks if the given "compat" string matches one of the strings in
  * the device's "compatible" property
 
 /** Checks if the given "compat" string matches one of the strings in
  * the device's "compatible" property
@@ -1562,18 +1533,6 @@ struct property *of_find_property(const struct device_node *np,
 }
 EXPORT_SYMBOL(of_find_property);
 
 }
 EXPORT_SYMBOL(of_find_property);
 
-/*
- * Find a property with a given name for a given node
- * and return the value.
- */
-const void *of_get_property(const struct device_node *np, const char *name,
-                        int *lenp)
-{
-       struct property *pp = of_find_property(np,name,lenp);
-       return pp ? pp->value : NULL;
-}
-EXPORT_SYMBOL(of_get_property);
-
 /*
  * Add a property to a node
  */
 /*
  * Add a property to a node
  */
index 603d83ad65c8f0012e11c3c300273424d24c1098..9d327ec59759746bf0938f53f89ed2569fba7c44 100644 (file)
@@ -24,6 +24,9 @@ config GENERIC_ISA_DMA
 config ARCH_NO_VIRT_TO_BUS
        def_bool y
 
 config ARCH_NO_VIRT_TO_BUS
        def_bool y
 
+config OF
+       def_bool y
+
 source "init/Kconfig"
 
 menu "General machine setup"
 source "init/Kconfig"
 
 menu "General machine setup"
index eed140b3c7397caf4abe0bd204df9bbb45dd25df..ac3f3c29b174c9b6c654f98a34d94211f1c7459d 100644 (file)
@@ -168,18 +168,6 @@ struct property *of_find_property(const struct device_node *np,
 }
 EXPORT_SYMBOL(of_find_property);
 
 }
 EXPORT_SYMBOL(of_find_property);
 
-/*
- * Find a property with a given name for a given node
- * and return the value.
- */
-const void *of_get_property(const struct device_node *np, const char *name,
-                           int *lenp)
-{
-       struct property *pp = of_find_property(np,name,lenp);
-       return pp ? pp->value : NULL;
-}
-EXPORT_SYMBOL(of_get_property);
-
 int of_getintprop_default(struct device_node *np, const char *name, int def)
 {
        struct property *prop;
 int of_getintprop_default(struct device_node *np, const char *name, int def)
 {
        struct property *prop;
@@ -193,36 +181,6 @@ int of_getintprop_default(struct device_node *np, const char *name, int def)
 }
 EXPORT_SYMBOL(of_getintprop_default);
 
 }
 EXPORT_SYMBOL(of_getintprop_default);
 
-int of_n_addr_cells(struct device_node *np)
-{
-       const int* ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#address-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #address-cells property for the root node, default to 2 */
-       return 2;
-}
-EXPORT_SYMBOL(of_n_addr_cells);
-
-int of_n_size_cells(struct device_node *np)
-{
-       const int* ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#size-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #size-cells property for the root node, default to 1 */
-       return 1;
-}
-EXPORT_SYMBOL(of_n_size_cells);
-
 int of_set_property(struct device_node *dp, const char *name, void *val, int len)
 {
        struct property **prevp;
 int of_set_property(struct device_node *dp, const char *name, void *val, int len)
 {
        struct property **prevp;
index df6ee71894d1f3228a6ddf59a599df3eeced3e9d..f1cc55677ff24b874db671be74d8ba736c727dbf 100644 (file)
@@ -65,6 +65,9 @@ config AUDIT_ARCH
 config ARCH_NO_VIRT_TO_BUS
        def_bool y
 
 config ARCH_NO_VIRT_TO_BUS
        def_bool y
 
+config OF
+       def_bool y
+
 choice
        prompt "Kernel page size"
        default SPARC64_PAGE_SIZE_8KB
 choice
        prompt "Kernel page size"
        default SPARC64_PAGE_SIZE_8KB
index 5d220302cd508709e65a9e32a3ea64cf98c40331..8f926d439c0fb9e664ea111188e30e32f492b35a 100644 (file)
@@ -173,18 +173,6 @@ struct property *of_find_property(const struct device_node *np,
 }
 EXPORT_SYMBOL(of_find_property);
 
 }
 EXPORT_SYMBOL(of_find_property);
 
-/*
- * Find a property with a given name for a given node
- * and return the value.
- */
-const void *of_get_property(const struct device_node *np, const char *name,
-                     int *lenp)
-{
-       struct property *pp = of_find_property(np,name,lenp);
-       return pp ? pp->value : NULL;
-}
-EXPORT_SYMBOL(of_get_property);
-
 int of_getintprop_default(struct device_node *np, const char *name, int def)
 {
        struct property *prop;
 int of_getintprop_default(struct device_node *np, const char *name, int def)
 {
        struct property *prop;
@@ -198,36 +186,6 @@ int of_getintprop_default(struct device_node *np, const char *name, int def)
 }
 EXPORT_SYMBOL(of_getintprop_default);
 
 }
 EXPORT_SYMBOL(of_getintprop_default);
 
-int of_n_addr_cells(struct device_node *np)
-{
-       const int* ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#address-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #address-cells property for the root node, default to 2 */
-       return 2;
-}
-EXPORT_SYMBOL(of_n_addr_cells);
-
-int of_n_size_cells(struct device_node *np)
-{
-       const int* ip;
-       do {
-               if (np->parent)
-                       np = np->parent;
-               ip = of_get_property(np, "#size-cells", NULL);
-               if (ip != NULL)
-                       return *ip;
-       } while (np->parent);
-       /* No #size-cells property for the root node, default to 1 */
-       return 1;
-}
-EXPORT_SYMBOL(of_n_size_cells);
-
 int of_set_property(struct device_node *dp, const char *name, void *val, int len)
 {
        struct property **prevp;
 int of_set_property(struct device_node *dp, const char *name, void *val, int len)
 {
        struct property **prevp;
index 0ea8e3237c0d0cbf381621841ae6fde722bb58cd..a9e4c5f922a041b094d219b5581398e8035ef1e4 100644 (file)
@@ -86,3 +86,4 @@ obj-$(CONFIG_GENERIC_TIME)    += clocksource/
 obj-$(CONFIG_DMA_ENGINE)       += dma/
 obj-$(CONFIG_HID)              += hid/
 obj-$(CONFIG_PPC_PS3)          += ps3/
 obj-$(CONFIG_DMA_ENGINE)       += dma/
 obj-$(CONFIG_HID)              += hid/
 obj-$(CONFIG_PPC_PS3)          += ps3/
+obj-$(CONFIG_OF)               += of/
diff --git a/drivers/of/Makefile b/drivers/of/Makefile
new file mode 100644 (file)
index 0000000..cddbe84
--- /dev/null
@@ -0,0 +1 @@
+obj-y = base.o
diff --git a/drivers/of/base.c b/drivers/of/base.c
new file mode 100644 (file)
index 0000000..723d80d
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Procedures for creating, accessing and interpreting the device tree.
+ *
+ * Paul Mackerras      August 1996.
+ * Copyright (C) 1996-2005 Paul Mackerras.
+ *
+ *  Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
+ *    {engebret|bergner}@us.ibm.com
+ *
+ *  Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net
+ *
+ *  Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell.
+ *
+ *      This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+#include <linux/module.h>
+#include <linux/of.h>
+
+int of_n_addr_cells(struct device_node *np)
+{
+       const int *ip;
+
+       do {
+               if (np->parent)
+                       np = np->parent;
+               ip = of_get_property(np, "#address-cells", NULL);
+               if (ip)
+                       return *ip;
+       } while (np->parent);
+       /* No #address-cells property for the root node */
+       return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
+}
+EXPORT_SYMBOL(of_n_addr_cells);
+
+int of_n_size_cells(struct device_node *np)
+{
+       const int *ip;
+
+       do {
+               if (np->parent)
+                       np = np->parent;
+               ip = of_get_property(np, "#size-cells", NULL);
+               if (ip)
+                       return *ip;
+       } while (np->parent);
+       /* No #size-cells property for the root node */
+       return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
+}
+EXPORT_SYMBOL(of_n_size_cells);
+
+/*
+ * Find a property with a given name for a given node
+ * and return the value.
+ */
+const void *of_get_property(const struct device_node *np, const char *name,
+                        int *lenp)
+{
+       struct property *pp = of_find_property(np, name, lenp);
+
+       return pp ? pp->value : NULL;
+}
+EXPORT_SYMBOL(of_get_property);
index 1134aeab2327d29e1e92aefa5c0d1ea61fd457c9..9fe0152ae245a63b8b5535d5a89f125bc7ca5eb9 100644 (file)
@@ -21,6 +21,9 @@
 #include <asm/irq.h>
 #include <asm/atomic.h>
 
 #include <asm/irq.h>
 #include <asm/atomic.h>
 
+#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT        1
+#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT        1
+
 /* Definitions used by the flattened device tree */
 #define OF_DT_HEADER           0xd00dfeed      /* marker */
 #define OF_DT_BEGIN_NODE       0x1             /* Start of node, full name */
 /* Definitions used by the flattened device tree */
 #define OF_DT_HEADER           0xd00dfeed      /* marker */
 #define OF_DT_BEGIN_NODE       0x1             /* Start of node, full name */
index d67af08abb4371e675f2dd0558276951953de715..a8a121f6332beff04247b324119177c9538bebb5 100644 (file)
@@ -20,6 +20,9 @@
 #include <linux/proc_fs.h>
 #include <asm/atomic.h>
 
 #include <linux/proc_fs.h>
 #include <asm/atomic.h>
 
+#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT        2
+#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT        1
+
 typedef u32 phandle;
 typedef u32 ihandle;
 
 typedef u32 phandle;
 typedef u32 ihandle;
 
index 9905ed057d939db4dde06664ad592024517a55f2..c98d1545ee8dcfc70824e3138128ed7d88db016a 100644 (file)
@@ -20,6 +20,9 @@
 #include <linux/proc_fs.h>
 #include <asm/atomic.h>
 
 #include <linux/proc_fs.h>
 #include <asm/atomic.h>
 
+#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT        2
+#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT        1
+
 typedef u32 phandle;
 typedef u32 ihandle;
 
 typedef u32 phandle;
 typedef u32 ihandle;