patch-2.1.120 linux/include/asm-m68k/virtconvert.h
Next file: linux/include/linux/byteorder/generic.h
Previous file: linux/include/asm-m68k/unistd.h
Back to the patch index
Back to the overall index
- Lines: 77
- Date:
Wed Sep 2 09:39:18 1998
- Orig file:
v2.1.119/linux/include/asm-m68k/virtconvert.h
- Orig date:
Wed Dec 31 16:00:00 1969
diff -u --recursive --new-file v2.1.119/linux/include/asm-m68k/virtconvert.h linux/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
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov