1 #ifndef __VIRT_CONVERT__
2 #define __VIRT_CONVERT__
5 * Macros used for converting between virtual and physical mappings.
10 #include <linux/config.h>
11 #include <asm/setup.h>
15 #include <asm/amigahw.h>
19 * Change virtual addresses to physical addresses and vv.
22 extern unsigned long mm_vtop(unsigned long addr
) __attribute__ ((const));
23 extern unsigned long mm_vtop_fallback (unsigned long) __attribute__ ((const));
24 extern unsigned long mm_ptov(unsigned long addr
) __attribute__ ((const));
26 extern inline unsigned long mm_vtop(unsigned long vaddr
)
31 extern inline unsigned long mm_ptov(unsigned long paddr
)
33 return (unsigned long)__va(paddr
);
37 #ifdef CONFIG_SINGLE_MEMORY_CHUNK
38 extern inline unsigned long virt_to_phys(volatile void *vaddr
)
40 unsigned long voff
= (unsigned long)vaddr
- PAGE_OFFSET
;
42 if (voff
< m68k_memory
[0].size
)
43 return voff
+ m68k_memory
[0].addr
;
44 return mm_vtop_fallback((unsigned long)vaddr
);
47 extern inline void * phys_to_virt(unsigned long paddr
)
49 unsigned long poff
= paddr
- m68k_memory
[0].addr
;
51 if (poff
< m68k_memory
[0].size
)
52 return (void *)(poff
+ PAGE_OFFSET
);
56 * if on an amiga and address is in first 16M, move it
57 * to the ZTWO_VADDR range
59 if (MACH_IS_AMIGA
&& paddr
< 16*1024*1024)
60 return (void *)ZTWO_VADDR(paddr
);
65 extern inline unsigned long virt_to_phys(volatile void * address
)
67 return mm_vtop((unsigned long)address
);
70 extern inline void * phys_to_virt(unsigned long address
)
72 return (void *) mm_ptov(address
);
77 * IO bus memory addresses are 1:1 with the physical address,
78 * except on the PCI bus of the Hades.
81 #define virt_to_bus(a) (virt_to_phys(a) + (MACH_IS_HADES ? 0x80000000 : 0))
82 #define bus_to_virt(a) (phys_to_virt((a) - (MACH_IS_HADES ? 0x80000000 : 0)))
84 #define virt_to_bus virt_to_phys
85 #define bus_to_virt phys_to_virt