diff options
| author | Stephen Rothwell <sfr@canb.auug.org.au> | 2007-05-01 02:26:07 -0400 |
|---|---|---|
| committer | Stephen Rothwell <sfr@canb.auug.org.au> | 2007-07-19 23:28:41 -0400 |
| commit | 97e873e5c8ad8711ce4cca080cff4eb5d21b3aeb (patch) | |
| tree | 7736415a2086522a083392f9ead34dac76c9560c /drivers/of | |
| parent | 76c1ce7870fd9b05431da1bbd47fdafcc029a25b (diff) | |
Start split out of common open firmware code
This creates drivers/of/base.c (depending on CONFIG_OF) and puts
the first trivially common bits from the prom.c files into it.
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Acked-by: Paul Mackerras <paulus@samba.org>
Acked-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/of')
| -rw-r--r-- | drivers/of/Makefile | 1 | ||||
| -rw-r--r-- | drivers/of/base.c | 65 |
2 files changed, 66 insertions, 0 deletions
diff --git a/drivers/of/Makefile b/drivers/of/Makefile new file mode 100644 index 00000000000..cddbe840e30 --- /dev/null +++ b/drivers/of/Makefile | |||
| @@ -0,0 +1 @@ | |||
| obj-y = base.o | |||
diff --git a/drivers/of/base.c b/drivers/of/base.c new file mode 100644 index 00000000000..723d80d704e --- /dev/null +++ b/drivers/of/base.c | |||
| @@ -0,0 +1,65 @@ | |||
| 1 | /* | ||
| 2 | * Procedures for creating, accessing and interpreting the device tree. | ||
| 3 | * | ||
| 4 | * Paul Mackerras August 1996. | ||
| 5 | * Copyright (C) 1996-2005 Paul Mackerras. | ||
| 6 | * | ||
| 7 | * Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner. | ||
| 8 | * {engebret|bergner}@us.ibm.com | ||
| 9 | * | ||
| 10 | * Adapted for sparc and sparc64 by David S. Miller davem@davemloft.net | ||
| 11 | * | ||
| 12 | * Reconsolidated from arch/x/kernel/prom.c by Stephen Rothwell. | ||
| 13 | * | ||
| 14 | * This program is free software; you can redistribute it and/or | ||
| 15 | * modify it under the terms of the GNU General Public License | ||
| 16 | * as published by the Free Software Foundation; either version | ||
| 17 | * 2 of the License, or (at your option) any later version. | ||
| 18 | */ | ||
| 19 | #include <linux/module.h> | ||
| 20 | #include <linux/of.h> | ||
| 21 | |||
| 22 | int of_n_addr_cells(struct device_node *np) | ||
| 23 | { | ||
| 24 | const int *ip; | ||
| 25 | |||
| 26 | do { | ||
| 27 | if (np->parent) | ||
| 28 | np = np->parent; | ||
| 29 | ip = of_get_property(np, "#address-cells", NULL); | ||
| 30 | if (ip) | ||
| 31 | return *ip; | ||
| 32 | } while (np->parent); | ||
| 33 | /* No #address-cells property for the root node */ | ||
| 34 | return OF_ROOT_NODE_ADDR_CELLS_DEFAULT; | ||
| 35 | } | ||
| 36 | EXPORT_SYMBOL(of_n_addr_cells); | ||
| 37 | |||
| 38 | int of_n_size_cells(struct device_node *np) | ||
| 39 | { | ||
| 40 | const int *ip; | ||
| 41 | |||
| 42 | do { | ||
| 43 | if (np->parent) | ||
| 44 | np = np->parent; | ||
| 45 | ip = of_get_property(np, "#size-cells", NULL); | ||
| 46 | if (ip) | ||
| 47 | return *ip; | ||
| 48 | } while (np->parent); | ||
| 49 | /* No #size-cells property for the root node */ | ||
| 50 | return OF_ROOT_NODE_SIZE_CELLS_DEFAULT; | ||
| 51 | } | ||
| 52 | EXPORT_SYMBOL(of_n_size_cells); | ||
| 53 | |||
| 54 | /* | ||
| 55 | * Find a property with a given name for a given node | ||
| 56 | * and return the value. | ||
| 57 | */ | ||
| 58 | const void *of_get_property(const struct device_node *np, const char *name, | ||
| 59 | int *lenp) | ||
| 60 | { | ||
| 61 | struct property *pp = of_find_property(np, name, lenp); | ||
| 62 | |||
| 63 | return pp ? pp->value : NULL; | ||
| 64 | } | ||
| 65 | EXPORT_SYMBOL(of_get_property); | ||
