1#ifndef __VIRT_CONVERT__
2#define __VIRT_CONVERT__
3
4/*
5 * Macros used for converting between virtual and physical mappings.
6 */
7
8#ifdef __KERNEL__
9
10#include <linux/config.h>
11#include <asm/setup.h>
12#include <asm/page.h>
13
14#ifdef CONFIG_AMIGA
15#include <asm/amigahw.h>
16#endif
17
18/*
19 * Change virtual addresses to physical addresses and vv.
20 */
21#ifndef CONFIG_SUN3
22extern unsigned long mm_vtop(unsigned long addr) __attribute__ ((const));
23extern unsigned long mm_vtop_fallback (unsigned long) __attribute__ ((const));
24extern unsigned long mm_ptov(unsigned long addr) __attribute__ ((const));
25#else
26extern inline unsigned long mm_vtop(unsigned long vaddr)
27{
28	return __pa(vaddr);
29}
30
31extern inline unsigned long mm_ptov(unsigned long paddr)
32{
33	return (unsigned long)__va(paddr);
34}
35#endif
36
37#ifdef CONFIG_SINGLE_MEMORY_CHUNK
38extern inline unsigned long virt_to_phys(volatile void *vaddr)
39{
40	unsigned long voff = (unsigned long)vaddr - PAGE_OFFSET;
41
42	if (voff < m68k_memory[0].size)
43		return voff + m68k_memory[0].addr;
44	return mm_vtop_fallback((unsigned long)vaddr);
45}
46
47extern inline void * phys_to_virt(unsigned long paddr)
48{
49	unsigned long poff = paddr - m68k_memory[0].addr;
50
51	if (poff < m68k_memory[0].size)
52		return (void *)(poff + PAGE_OFFSET);
53
54#ifdef CONFIG_AMIGA
55	/*
56	 * if on an amiga and address is in first 16M, move it
57	 * to the ZTWO_VADDR range
58	 */
59	if (MACH_IS_AMIGA && paddr < 16*1024*1024)
60		return (void *)ZTWO_VADDR(paddr);
61#endif
62	return (void *)paddr;
63}
64#else
65extern inline unsigned long virt_to_phys(volatile void * address)
66{
67	return mm_vtop((unsigned long)address);
68}
69
70extern inline void * phys_to_virt(unsigned long address)
71{
72	return (void *) mm_ptov(address);
73}
74#endif
75
76/*
77 * IO bus memory addresses are 1:1 with the physical address,
78 * except on the PCI bus of the Hades.
79 */
80#ifdef CONFIG_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)))
83#else
84#define virt_to_bus virt_to_phys
85#define bus_to_virt phys_to_virt
86#endif
87
88#endif
89#endif
90