From 7fc55b4300dd7194b6d94cfaac392f70e69df166 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Wed, 21 Jun 2006 16:33:54 -0700 Subject: [PATCH] --- yaml --- r: 29550 b: refs/heads/master c: aaf7cec2769942035985716452107fc5ba0b11f6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/sparc64/kernel/prom.c | 26 ++++++++++++++++++++++++++ trunk/include/asm-sparc64/prom.h | 10 ++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0716bfe501f9..3b102ab92b5e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 372b07bb5a13f8a1b8a3ce49cd76d39a79dbd3bd +refs/heads/master: aaf7cec2769942035985716452107fc5ba0b11f6 diff --git a/trunk/arch/sparc64/kernel/prom.c b/trunk/arch/sparc64/kernel/prom.c index c99b7aae19df..fd46e94ce06b 100644 --- a/trunk/arch/sparc64/kernel/prom.c +++ b/trunk/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/trunk/include/asm-sparc64/prom.h b/trunk/include/asm-sparc64/prom.h index 44bcc83267f3..eb75d3cbcf4c 100644 --- a/trunk/include/asm-sparc64/prom.h +++ b/trunk/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,