diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2009-10-15 12:58:09 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-10-15 12:58:09 -0400 |
commit | e91edcf5a2940bb7f1f316c871dfe9e2aaf9d6d9 (patch) | |
tree | 65030951a26540f26dc2f6b33d4b260879b3fdd2 | |
parent | 82b2928c95d824afd9af3bb41660f3c3fa1f234e (diff) |
of: merge of_find_all_nodes() implementations
Merge common code between Microblaze and PowerPC, and make it available
to Sparc
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Wolfram Sang <w.sang@pengutronix.de>
Acked-by: Michal Simek <monstr@monstr.eu>
Acked-by: Stephen Neuendorffer <stephen.neuendorffer@xilinx.com>
Acked-by: Stephen Rothwell <sfr@canb.auug.org.au>
-rw-r--r-- | arch/microblaze/kernel/prom.c | 23 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 23 | ||||
-rw-r--r-- | drivers/of/base.c | 26 | ||||
-rw-r--r-- | include/linux/of.h | 3 |
4 files changed, 27 insertions, 48 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index c005cc6f1aaf..b817df172aa9 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
@@ -860,29 +860,6 @@ struct device_node *of_find_node_by_phandle(phandle handle) | |||
860 | EXPORT_SYMBOL(of_find_node_by_phandle); | 860 | EXPORT_SYMBOL(of_find_node_by_phandle); |
861 | 861 | ||
862 | /** | 862 | /** |
863 | * of_find_all_nodes - Get next node in global list | ||
864 | * @prev: Previous node or NULL to start iteration | ||
865 | * of_node_put() will be called on it | ||
866 | * | ||
867 | * Returns a node pointer with refcount incremented, use | ||
868 | * of_node_put() on it when done. | ||
869 | */ | ||
870 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
871 | { | ||
872 | struct device_node *np; | ||
873 | |||
874 | read_lock(&devtree_lock); | ||
875 | np = prev ? prev->allnext : allnodes; | ||
876 | for (; np != NULL; np = np->allnext) | ||
877 | if (of_node_get(np)) | ||
878 | break; | ||
879 | of_node_put(prev); | ||
880 | read_unlock(&devtree_lock); | ||
881 | return np; | ||
882 | } | ||
883 | EXPORT_SYMBOL(of_find_all_nodes); | ||
884 | |||
885 | /** | ||
886 | * of_node_get - Increment refcount of a node | 863 | * of_node_get - Increment refcount of a node |
887 | * @node: Node to inc refcount, NULL is supported to | 864 | * @node: Node to inc refcount, NULL is supported to |
888 | * simplify writing of callers | 865 | * simplify writing of callers |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index d4405b95bfaa..4ec300862466 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -1317,29 +1317,6 @@ struct device_node *of_find_next_cache_node(struct device_node *np) | |||
1317 | } | 1317 | } |
1318 | 1318 | ||
1319 | /** | 1319 | /** |
1320 | * of_find_all_nodes - Get next node in global list | ||
1321 | * @prev: Previous node or NULL to start iteration | ||
1322 | * of_node_put() will be called on it | ||
1323 | * | ||
1324 | * Returns a node pointer with refcount incremented, use | ||
1325 | * of_node_put() on it when done. | ||
1326 | */ | ||
1327 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
1328 | { | ||
1329 | struct device_node *np; | ||
1330 | |||
1331 | read_lock(&devtree_lock); | ||
1332 | np = prev ? prev->allnext : allnodes; | ||
1333 | for (; np != 0; np = np->allnext) | ||
1334 | if (of_node_get(np)) | ||
1335 | break; | ||
1336 | of_node_put(prev); | ||
1337 | read_unlock(&devtree_lock); | ||
1338 | return np; | ||
1339 | } | ||
1340 | EXPORT_SYMBOL(of_find_all_nodes); | ||
1341 | |||
1342 | /** | ||
1343 | * of_node_get - Increment refcount of a node | 1320 | * of_node_get - Increment refcount of a node |
1344 | * @node: Node to inc refcount, NULL is supported to | 1321 | * @node: Node to inc refcount, NULL is supported to |
1345 | * simplify writing of callers | 1322 | * simplify writing of callers |
diff --git a/drivers/of/base.c b/drivers/of/base.c index ddf224d456b2..e6627b2320f1 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c | |||
@@ -9,7 +9,8 @@ | |||
9 | * | 9 | * |
10 | * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net | 10 | * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net |
11 | * | 11 | * |
12 | * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. | 12 | * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell and |
13 | * Grant Likely. | ||
13 | * | 14 | * |
14 | * This program is free software; you can redistribute it and/or | 15 | * This program is free software; you can redistribute it and/or |
15 | * modify it under the terms of the GNU General Public License | 16 | * 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 | } | 83 | } |
83 | EXPORT_SYMBOL(of_find_property); | 84 | EXPORT_SYMBOL(of_find_property); |
84 | 85 | ||
86 | /** | ||
87 | * of_find_all_nodes - Get next node in global list | ||
88 | * @prev: Previous node or NULL to start iteration | ||
89 | * of_node_put() will be called on it | ||
90 | * | ||
91 | * Returns a node pointer with refcount incremented, use | ||
92 | * of_node_put() on it when done. | ||
93 | */ | ||
94 | struct device_node *of_find_all_nodes(struct device_node *prev) | ||
95 | { | ||
96 | struct device_node *np; | ||
97 | |||
98 | read_lock(&devtree_lock); | ||
99 | np = prev ? prev->allnext : allnodes; | ||
100 | for (; np != NULL; np = np->allnext) | ||
101 | if (of_node_get(np)) | ||
102 | break; | ||
103 | of_node_put(prev); | ||
104 | read_unlock(&devtree_lock); | ||
105 | return np; | ||
106 | } | ||
107 | EXPORT_SYMBOL(of_find_all_nodes); | ||
108 | |||
85 | /* | 109 | /* |
86 | * Find a property with a given name for a given node | 110 | * Find a property with a given name for a given node |
87 | * and return the value. | 111 | * and return the value. |
diff --git a/include/linux/of.h b/include/linux/of.h index 4636bba93afa..e7facd8fbce8 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
@@ -79,6 +79,8 @@ set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) | |||
79 | dn->pde = de; | 79 | dn->pde = de; |
80 | } | 80 | } |
81 | 81 | ||
82 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
83 | |||
82 | #if defined(CONFIG_SPARC) | 84 | #if defined(CONFIG_SPARC) |
83 | /* Dummy ref counting routines - to be implemented later */ | 85 | /* Dummy ref counting routines - to be implemented later */ |
84 | static inline struct device_node *of_node_get(struct device_node *node) | 86 | 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 | } | 92 | } |
91 | 93 | ||
92 | #else | 94 | #else |
93 | extern struct device_node *of_find_all_nodes(struct device_node *prev); | ||
94 | extern struct device_node *of_node_get(struct device_node *node); | 95 | extern struct device_node *of_node_get(struct device_node *node); |
95 | extern void of_node_put(struct device_node *node); | 96 | extern void of_node_put(struct device_node *node); |
96 | #endif | 97 | #endif |