diff options
Diffstat (limited to 'include/asm-m68k/virtconvert.h')
-rw-r--r-- | include/asm-m68k/virtconvert.h | 76 |
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 000000000000..8c4e8037b898 --- /dev/null +++ b/include/asm-m68k/virtconvert.h | |||
@@ -0,0 +1,76 @@ | |||
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 <linux/compiler.h> | ||
12 | #include <asm/setup.h> | ||
13 | #include <asm/page.h> | ||
14 | |||
15 | #ifdef CONFIG_AMIGA | ||
16 | #include <asm/amigahw.h> | ||
17 | #endif | ||
18 | |||
19 | /* | ||
20 | * Change virtual addresses to physical addresses and vv. | ||
21 | */ | ||
22 | #ifndef CONFIG_SUN3 | ||
23 | extern unsigned long mm_vtop(unsigned long addr) __attribute_const__; | ||
24 | extern unsigned long mm_ptov(unsigned long addr) __attribute_const__; | ||
25 | #else | ||
26 | static inline unsigned long mm_vtop(unsigned long vaddr) | ||
27 | { | ||
28 | return __pa(vaddr); | ||
29 | } | ||
30 | |||
31 | static 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 | ||
38 | static inline unsigned long virt_to_phys(void *vaddr) | ||
39 | { | ||
40 | return (unsigned long)vaddr - PAGE_OFFSET + m68k_memory[0].addr; | ||
41 | } | ||
42 | |||
43 | static inline void * phys_to_virt(unsigned long paddr) | ||
44 | { | ||
45 | return (void *)(paddr - m68k_memory[0].addr + PAGE_OFFSET); | ||
46 | } | ||
47 | #else | ||
48 | static inline unsigned long virt_to_phys(void *address) | ||
49 | { | ||
50 | return mm_vtop((unsigned long)address); | ||
51 | } | ||
52 | |||
53 | static inline void *phys_to_virt(unsigned long address) | ||
54 | { | ||
55 | return (void *) mm_ptov(address); | ||
56 | } | ||
57 | #endif | ||
58 | |||
59 | /* Permanent address of a page. */ | ||
60 | #define __page_address(page) (PAGE_OFFSET + (((page) - mem_map) << PAGE_SHIFT)) | ||
61 | #define page_to_phys(page) virt_to_phys((void *)__page_address(page)) | ||
62 | |||
63 | /* | ||
64 | * IO bus memory addresses are 1:1 with the physical address, | ||
65 | * except on the PCI bus of the Hades. | ||
66 | */ | ||
67 | #ifdef CONFIG_HADES | ||
68 | #define virt_to_bus(a) (virt_to_phys(a) + (MACH_IS_HADES ? 0x80000000 : 0)) | ||
69 | #define bus_to_virt(a) (phys_to_virt((a) - (MACH_IS_HADES ? 0x80000000 : 0))) | ||
70 | #else | ||
71 | #define virt_to_bus virt_to_phys | ||
72 | #define bus_to_virt phys_to_virt | ||
73 | #endif | ||
74 | |||
75 | #endif | ||
76 | #endif | ||