diff options
author | Andres Salomon <dilinger@queued.net> | 2010-10-10 23:49:45 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-10-12 23:57:53 -0400 |
commit | f90c34bd658d240cb5ebc5fe0a17796e590c6ec8 (patch) | |
tree | 02e8243910e156d3af4a14bd9be63dd829d07576 /include/linux | |
parent | 3cfc535c5df8122af1258ae05aaf2770c033425d (diff) |
of/promtree: no longer call prom_ functions directly; use an ops structure
Rather than assuming an architecture defines prom_getchild and friends,
define an ops struct with hooks for the various prom functions that
pdt.c needs. This ops struct is filled in by the
arch-(and sometimes firmware-)specific code, and passed to
of_pdt_build_devicetree.
Update sparc code to define the ops struct as well.
Signed-off-by: Andres Salomon <dilinger@queued.net>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/of_pdt.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/include/linux/of_pdt.h b/include/linux/of_pdt.h index c0a8774e45d0..303c5ffae9b4 100644 --- a/include/linux/of_pdt.h +++ b/include/linux/of_pdt.h | |||
@@ -13,10 +13,28 @@ | |||
13 | #ifndef _LINUX_OF_PDT_H | 13 | #ifndef _LINUX_OF_PDT_H |
14 | #define _LINUX_OF_PDT_H | 14 | #define _LINUX_OF_PDT_H |
15 | 15 | ||
16 | /* overridable operations for calling into the PROM */ | ||
17 | struct of_pdt_ops { | ||
18 | /* | ||
19 | * buf should be 32 bytes; return 0 on success. | ||
20 | * If prev is NULL, the first property will be returned. | ||
21 | */ | ||
22 | int (*nextprop)(phandle node, char *prev, char *buf); | ||
23 | |||
24 | /* for both functions, return proplen on success; -1 on error */ | ||
25 | int (*getproplen)(phandle node, const char *prop); | ||
26 | int (*getproperty)(phandle node, const char *prop, char *buf, | ||
27 | int bufsize); | ||
28 | |||
29 | /* phandles are 0 if no child or sibling exists */ | ||
30 | phandle (*getchild)(phandle parent); | ||
31 | phandle (*getsibling)(phandle node); | ||
32 | }; | ||
33 | |||
16 | extern void *prom_early_alloc(unsigned long size); | 34 | extern void *prom_early_alloc(unsigned long size); |
17 | 35 | ||
18 | /* for building the device tree */ | 36 | /* for building the device tree */ |
19 | extern void of_pdt_build_devicetree(phandle root_node); | 37 | extern void of_pdt_build_devicetree(phandle root_node, struct of_pdt_ops *ops); |
20 | 38 | ||
21 | extern void (*prom_build_more)(struct device_node *dp, | 39 | extern void (*prom_build_more)(struct device_node *dp, |
22 | struct device_node ***nextp); | 40 | struct device_node ***nextp); |