Commit e91edcf5 authored by Grant Likely's avatar Grant Likely

of: merge of_find_all_nodes() implementations

Merge common code between Microblaze and PowerPC, and make it available
to Sparc
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Acked-by: default avatarWolfram Sang <w.sang@pengutronix.de>
Acked-by: default avatarMichal Simek <monstr@monstr.eu>
Acked-by: default avatarStephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Acked-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
parent 82b2928c
...@@ -859,29 +859,6 @@ struct device_node *of_find_node_by_phandle(phandle handle) ...@@ -859,29 +859,6 @@ struct device_node *of_find_node_by_phandle(phandle handle)
} }
EXPORT_SYMBOL(of_find_node_by_phandle); EXPORT_SYMBOL(of_find_node_by_phandle);
/**
* of_find_all_nodes - Get next node in global list
* @prev: Previous node or NULL to start iteration
* of_node_put() will be called on it
*
* Returns a node pointer with refcount incremented, use
* of_node_put() on it when done.
*/
struct device_node *of_find_all_nodes(struct device_node *prev)
{
struct device_node *np;
read_lock(&devtree_lock);
np = prev ? prev->allnext : allnodes;
for (; np != NULL; np = np->allnext)
if (of_node_get(np))
break;
of_node_put(prev);
read_unlock(&devtree_lock);
return np;
}
EXPORT_SYMBOL(of_find_all_nodes);
/** /**
* of_node_get - Increment refcount of a node * of_node_get - Increment refcount of a node
* @node: Node to inc refcount, NULL is supported to * @node: Node to inc refcount, NULL is supported to
......
...@@ -1316,29 +1316,6 @@ struct device_node *of_find_next_cache_node(struct device_node *np) ...@@ -1316,29 +1316,6 @@ struct device_node *of_find_next_cache_node(struct device_node *np)
return NULL; return NULL;
} }
/**
* of_find_all_nodes - Get next node in global list
* @prev: Previous node or NULL to start iteration
* of_node_put() will be called on it
*
* Returns a node pointer with refcount incremented, use
* of_node_put() on it when done.
*/
struct device_node *of_find_all_nodes(struct device_node *prev)
{
struct device_node *np;
read_lock(&devtree_lock);
np = prev ? prev->allnext : allnodes;
for (; np != 0; np = np->allnext)
if (of_node_get(np))
break;
of_node_put(prev);
read_unlock(&devtree_lock);
return np;
}
EXPORT_SYMBOL(of_find_all_nodes);
/** /**
* of_node_get - Increment refcount of a node * of_node_get - Increment refcount of a node
* @node: Node to inc refcount, NULL is supported to * @node: Node to inc refcount, NULL is supported to
......
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
* *
* Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net
* *
* Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and
* Grant Likely.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
...@@ -82,6 +83,29 @@ struct property *of_find_property(const struct device_node *np, ...@@ -82,6 +83,29 @@ struct property *of_find_property(const struct device_node *np,
} }
EXPORT_SYMBOL(of_find_property); EXPORT_SYMBOL(of_find_property);
/**
* of_find_all_nodes - Get next node in global list
* @prev: Previous node or NULL to start iteration
* of_node_put() will be called on it
*
* Returns a node pointer with refcount incremented, use
* of_node_put() on it when done.
*/
struct device_node *of_find_all_nodes(struct device_node *prev)
{
struct device_node *np;
read_lock(&devtree_lock);
np = prev ? prev->allnext : allnodes;
for (; np != NULL; np = np->allnext)
if (of_node_get(np))
break;
of_node_put(prev);
read_unlock(&devtree_lock);
return np;
}
EXPORT_SYMBOL(of_find_all_nodes);
/* /*
* Find a property with a given name for a given node * Find a property with a given name for a given node
* and return the value. * and return the value.
......
...@@ -79,6 +79,8 @@ set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) ...@@ -79,6 +79,8 @@ set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de)
dn->pde = de; dn->pde = de;
} }
extern struct device_node *of_find_all_nodes(struct device_node *prev);
#if defined(CONFIG_SPARC) #if defined(CONFIG_SPARC)
/* Dummy ref counting routines - to be implemented later */ /* Dummy ref counting routines - to be implemented later */
static inline struct device_node *of_node_get(struct device_node *node) static inline struct device_node *of_node_get(struct device_node *node)
...@@ -90,7 +92,6 @@ static inline void of_node_put(struct device_node *node) ...@@ -90,7 +92,6 @@ static inline void of_node_put(struct device_node *node)
} }
#else #else
extern struct device_node *of_find_all_nodes(struct device_node *prev);
extern struct device_node *of_node_get(struct device_node *node); extern struct device_node *of_node_get(struct device_node *node);
extern void of_node_put(struct device_node *node); extern void of_node_put(struct device_node *node);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment