diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-06-21 16:33:54 -0700 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-06-23 23:15:04 -0700 |
commit | aaf7cec2769942035985716452107fc5ba0b11f6 (patch) | |
tree | 4f4bc5278ef41e016b97b6860d30fa773db7fee2 | |
parent | 372b07bb5a13f8a1b8a3ce49cd76d39a79dbd3bd (diff) | |
download | blackbird-op-linux-aaf7cec2769942035985716452107fc5ba0b11f6.tar.gz blackbird-op-linux-aaf7cec2769942035985716452107fc5ba0b11f6.zip |
[SPARC64]: Add of_find_node_by_{name,type}().
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | arch/sparc64/kernel/prom.c | 26 | ||||
-rw-r--r-- | include/asm-sparc64/prom.h | 10 |
2 files changed, 36 insertions, 0 deletions
diff --git a/arch/sparc64/kernel/prom.c b/arch/sparc64/kernel/prom.c index c99b7aae19df..fd46e94ce06b 100644 --- a/arch/sparc64/kernel/prom.c +++ b/arch/sparc64/kernel/prom.c @@ -63,6 +63,32 @@ struct device_node *of_find_node_by_path(const char *path) return np; } +struct device_node *of_find_node_by_name(struct device_node *from, + const char *name) +{ + struct device_node *np; + + np = from ? from->allnext : allnodes; + for (; np != NULL; np = np->allnext) + if (np->name != NULL && strcmp(np->name, name) == 0) + break; + + return np; +} + +struct device_node *of_find_node_by_type(struct device_node *from, + const char *type) +{ + struct device_node *np; + + np = from ? from->allnext : allnodes; + for (; np != 0; np = np->allnext) + if (np->type != 0 && strcmp(np->type, type) == 0) + break; + + return np; +} + struct property *of_find_property(struct device_node *np, const char *name, int *lenp) { diff --git a/include/asm-sparc64/prom.h b/include/asm-sparc64/prom.h index 44bcc83267f3..eb75d3cbcf4c 100644 --- a/include/asm-sparc64/prom.h +++ b/include/asm-sparc64/prom.h @@ -65,6 +65,16 @@ static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_e dn->pde = de; } +extern struct device_node *of_find_node_by_name(struct device_node *from, + const char *name); +#define for_each_node_by_name(dn, name) \ + for (dn = of_find_node_by_name(NULL, name); dn; \ + dn = of_find_node_by_name(dn, name)) +extern struct device_node *of_find_node_by_type(struct device_node *from, + const char *type); +#define for_each_node_by_type(dn, type) \ + for (dn = of_find_node_by_type(NULL, type); dn; \ + dn = of_find_node_by_type(dn, type)) extern struct device_node *of_find_node_by_path(const char *path); extern struct device_node *of_get_parent(const struct device_node *node); extern struct device_node *of_get_next_child(const struct device_node *node, |