| /* |
| * 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); |