summaryrefslogtreecommitdiffstats
path: root/include/asm-m68k/virtconvert.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-09-19 19:15:08 +0000
commit03ba4131783cc9e872f8bb26a03f15bc11f27564 (patch)
tree88db8dba75ae06ba3bad08e42c5e52efc162535c /include/asm-m68k/virtconvert.h
parent257730f99381dd26e10b832fce4c94cae7ac1176 (diff)
- Merge with Linux 2.1.121.
- Bugfixes.
Diffstat (limited to 'include/asm-m68k/virtconvert.h')
-rw-r--r--include/asm-m68k/virtconvert.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/include/asm-m68k/virtconvert.h b/include/asm-m68k/virtconvert.h
new file mode 100644
index 000000000..1e942b9e5
--- /dev/null
+++ b/include/asm-m68k/virtconvert.h
@@ -0,0 +1,76 @@
+#ifndef __VIRT_CONVERT__
+#define __VIRT_CONVERT__
+
+/*
+ * Macros used for converting between virtual and physical mappings.
+ */
+
+#ifdef __KERNEL__
+
+#include <linux/config.h>
+#include <asm/setup.h>
+
+#ifdef CONFIG_AMIGA
+#include <asm/amigahw.h>
+#endif
+
+/*
+ * Change virtual addresses to physical addresses and vv.
+ */
+extern unsigned long mm_vtop(unsigned long addr) __attribute__ ((const));
+extern unsigned long mm_vtop_fallback (unsigned long);
+extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const));
+
+#ifdef CONFIG_SINGLE_MEMORY_CHUNK
+extern inline unsigned long virt_to_phys(volatile void * address)
+{
+ unsigned long voff = (unsigned long) address;
+
+ if (voff < m68k_memory[0].size)
+ return m68k_memory[0].addr + voff;
+ else
+ return mm_vtop_fallback(voff);
+}
+
+extern inline void * phys_to_virt(unsigned long paddr)
+{
+ unsigned long base = m68k_memory[0].addr;
+
+ if ((paddr >= base) && (paddr < (base + m68k_memory[0].size)))
+ return (void *)(paddr - base);
+#ifdef CONFIG_AMIGA
+ /*
+ * if on an amiga and address is in first 16M, move it
+ * to the ZTWO_VADDR range
+ */
+ if (MACH_IS_AMIGA && paddr < 16*1024*1024)
+ return (void *)ZTWO_VADDR(paddr);
+#endif
+ return (void *)paddr;
+}
+#else
+extern inline unsigned long virt_to_phys(volatile void * address)
+{
+ return mm_vtop((unsigned long)address);
+}
+
+extern inline void * phys_to_virt(unsigned long address)
+{
+ return (void *) mm_ptov(address);
+}
+#endif
+
+/*
+ * IO bus memory addresses are 1:1 with the physical address,
+ * except on the PCI bus of the Hades.
+ */
+#ifdef CONFIG_HADES
+#define virt_to_bus(a) (virt_to_phys(a) + (MACH_IS_HADES ? 0x80000000 : 0))
+#define bus_to_virt(a) (phys_to_virt((a) - (MACH_IS_HADES ? 0x80000000 : 0)))
+#else
+#define virt_to_bus virt_to_phys
+#define bus_to_virt phys_to_virt
+#endif
+
+#endif
+#endif