aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2005-11-23 01:53:42 -0500
committerPaul Mackerras <paulus@samba.org>2006-01-08 22:49:46 -0500
commitd1405b869850982f05c7ec0d3f137ca27588192f (patch)
treeb95b4e6e36f654205ad720609734a5b2ca549de0 /include
parentbcb05504edf0e27a648aa1059cbb71e8746758a1 (diff)
[PATCH] powerpc: Add OF address parsing code (#2)
Parsing addresses extracted from Open Firmware isn't a simple matter. We have various bits of code that try to do it in various place, including some heuristics in prom.c that pre-parse addresses at boot and fill device-nodes "addrs", but those are dodgy at best and I want to deprecate them. So this patch introduces a new set of routines that should be capable of parsing most types of addresses and translating them into CPU physical addresses. It currently works for things on PCI busses and ISA busses and should work on "standard" busses like the root bus or the MacIO bus that don't put funky flags in addresses. If you have other bus types that do use funky flags, you'll have to add new bus type translators, which is fairly easy. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include')
-rw-r--r--include/asm-powerpc/mmu.h4
-rw-r--r--include/asm-powerpc/prom.h9
-rw-r--r--include/asm-ppc/prom.h10
3 files changed, 23 insertions, 0 deletions
diff --git a/include/asm-powerpc/mmu.h b/include/asm-powerpc/mmu.h
index 29b0bb0086d3..29613500c2c2 100644
--- a/include/asm-powerpc/mmu.h
+++ b/include/asm-powerpc/mmu.h
@@ -394,6 +394,10 @@ static inline unsigned long get_vsid(unsigned long context, unsigned long ea)
394#define VSID_SCRAMBLE(pvsid) (((pvsid) * VSID_MULTIPLIER) % VSID_MODULUS) 394#define VSID_SCRAMBLE(pvsid) (((pvsid) * VSID_MULTIPLIER) % VSID_MODULUS)
395#define KERNEL_VSID(ea) VSID_SCRAMBLE(GET_ESID(ea)) 395#define KERNEL_VSID(ea) VSID_SCRAMBLE(GET_ESID(ea))
396 396
397/* Physical address used by some IO functions */
398typedef unsigned long phys_addr_t;
399
400
397#endif /* __ASSEMBLY */ 401#endif /* __ASSEMBLY */
398 402
399#endif /* CONFIG_PPC64 */ 403#endif /* CONFIG_PPC64 */
diff --git a/include/asm-powerpc/prom.h b/include/asm-powerpc/prom.h
index f999df1c5c90..fb732c992bd2 100644
--- a/include/asm-powerpc/prom.h
+++ b/include/asm-powerpc/prom.h
@@ -223,5 +223,14 @@ extern struct resource *request_OF_resource(struct device_node* node,
223 int index, const char* name_postfix); 223 int index, const char* name_postfix);
224extern int release_OF_resource(struct device_node* node, int index); 224extern int release_OF_resource(struct device_node* node, int index);
225 225
226/*
227 * Address translation function(s)
228 */
229#define OF_BAD_ADDR ((u64)-1)
230extern u64 of_translate_address(struct device_node *np, u32 *addr);
231extern u32 *of_get_address(struct device_node *dev, int index, u64 *size);
232extern u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size);
233
234
226#endif /* __KERNEL__ */ 235#endif /* __KERNEL__ */
227#endif /* _POWERPC_PROM_H */ 236#endif /* _POWERPC_PROM_H */
diff --git a/include/asm-ppc/prom.h b/include/asm-ppc/prom.h
index 3e39827ed566..a10a2d64b300 100644
--- a/include/asm-ppc/prom.h
+++ b/include/asm-ppc/prom.h
@@ -136,5 +136,15 @@ extern unsigned long sub_reloc_offset(unsigned long);
136#define PTRRELOC(x) ((typeof(x))add_reloc_offset((unsigned long)(x))) 136#define PTRRELOC(x) ((typeof(x))add_reloc_offset((unsigned long)(x)))
137#define PTRUNRELOC(x) ((typeof(x))sub_reloc_offset((unsigned long)(x))) 137#define PTRUNRELOC(x) ((typeof(x))sub_reloc_offset((unsigned long)(x)))
138 138
139
140/*
141 * Address translation function(s)
142 */
143#define OF_BAD_ADDR ((u64)-1)
144extern u64 of_translate_address(struct device_node *np, u32 *addr);
145extern u32 *of_get_address(struct device_node *dev, int index, u64 *size);
146extern u32 *of_get_pci_address(struct device_node *dev, int bar_no, u64 *size);
147
148
139#endif /* _PPC_PROM_H */ 149#endif /* _PPC_PROM_H */
140#endif /* __KERNEL__ */ 150#endif /* __KERNEL__ */