blob: 8c4e8037b89849a47de6d63a1620d95648279b65 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001#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
23extern unsigned long mm_vtop(unsigned long addr) __attribute_const__;
24extern unsigned long mm_ptov(unsigned long addr) __attribute_const__;
25#else
26static inline unsigned long mm_vtop(unsigned long vaddr)
27{
28 return __pa(vaddr);
29}
30
31static 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
38static inline unsigned long virt_to_phys(void *vaddr)
39{
40 return (unsigned long)vaddr - PAGE_OFFSET + m68k_memory[0].addr;
41}
42
43static inline void * phys_to_virt(unsigned long paddr)
44{
45 return (void *)(paddr - m68k_memory[0].addr + PAGE_OFFSET);
46}
47#else
48static inline unsigned long virt_to_phys(void *address)
49{
50 return mm_vtop((unsigned long)address);
51}
52
53static 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