Start split out of common open firmware code
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>
This commit is contained in:
parent
76c1ce7870
commit
97e873e5c8
12 changed files with 85 additions and 125 deletions
|
@ -92,6 +92,9 @@ config ARCH_MAY_HAVE_PC_FDC
|
||||||
config PPC_OF
|
config PPC_OF
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config OF
|
||||||
|
def_bool y
|
||||||
|
|
||||||
config PPC_UDBG_16550
|
config PPC_UDBG_16550
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -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
|
/** Checks if the given "compat" string matches one of the strings in
|
||||||
* the device's "compatible" property
|
* 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
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -24,6 +24,9 @@ config GENERIC_ISA_DMA
|
||||||
config ARCH_NO_VIRT_TO_BUS
|
config ARCH_NO_VIRT_TO_BUS
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config OF
|
||||||
|
def_bool y
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|
||||||
menu "General machine setup"
|
menu "General machine setup"
|
||||||
|
|
|
@ -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)
|
int of_getintprop_default(struct device_node *np, const char *name, int def)
|
||||||
{
|
{
|
||||||
struct property *prop;
|
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)
|
int of_set_property(struct device_node *dp, const char *name, void *val, int len)
|
||||||
{
|
{
|
||||||
struct property **prevp;
|
struct property **prevp;
|
||||||
|
|
|
@ -65,6 +65,9 @@ config AUDIT_ARCH
|
||||||
config ARCH_NO_VIRT_TO_BUS
|
config ARCH_NO_VIRT_TO_BUS
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config OF
|
||||||
|
def_bool y
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "Kernel page size"
|
prompt "Kernel page size"
|
||||||
default SPARC64_PAGE_SIZE_8KB
|
default SPARC64_PAGE_SIZE_8KB
|
||||||
|
|
|
@ -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)
|
int of_getintprop_default(struct device_node *np, const char *name, int def)
|
||||||
{
|
{
|
||||||
struct property *prop;
|
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)
|
int of_set_property(struct device_node *dp, const char *name, void *val, int len)
|
||||||
{
|
{
|
||||||
struct property **prevp;
|
struct property **prevp;
|
||||||
|
|
|
@ -86,3 +86,4 @@ obj-$(CONFIG_GENERIC_TIME) += clocksource/
|
||||||
obj-$(CONFIG_DMA_ENGINE) += dma/
|
obj-$(CONFIG_DMA_ENGINE) += dma/
|
||||||
obj-$(CONFIG_HID) += hid/
|
obj-$(CONFIG_HID) += hid/
|
||||||
obj-$(CONFIG_PPC_PS3) += ps3/
|
obj-$(CONFIG_PPC_PS3) += ps3/
|
||||||
|
obj-$(CONFIG_OF) += of/
|
||||||
|
|
1
drivers/of/Makefile
Normal file
1
drivers/of/Makefile
Normal file
|
@ -0,0 +1 @@
|
||||||
|
obj-y = base.o
|
65
drivers/of/base.c
Normal file
65
drivers/of/base.c
Normal file
|
@ -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);
|
|
@ -21,6 +21,9 @@
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/atomic.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 */
|
/* Definitions used by the flattened device tree */
|
||||||
#define OF_DT_HEADER 0xd00dfeed /* marker */
|
#define OF_DT_HEADER 0xd00dfeed /* marker */
|
||||||
#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
|
#define OF_DT_BEGIN_NODE 0x1 /* Start of node, full name */
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
#include <asm/atomic.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 phandle;
|
||||||
typedef u32 ihandle;
|
typedef u32 ihandle;
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,9 @@
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
#include <asm/atomic.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 phandle;
|
||||||
typedef u32 ihandle;
|
typedef u32 ihandle;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue