Commit 98fd5aee authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar

x86: page.h: move pa and va related things

# HG changeset patch
# User Jeremy Fitzhardinge <jeremy@xensource.com>
# Date 1199319656 28800
# Node ID d617b72a0cc9d14bde2087d065c36d4ed3265761
# Parent  3bd7db6e85e66e7f3362874802df26a82fcb2d92
x86: page.h: move pa and va related things

Move and unify the virtual<->physical address space conversion
functions.
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent 6724a1d2
...@@ -80,6 +80,9 @@ ...@@ -80,6 +80,9 @@
void clear_page(void *page); void clear_page(void *page);
void copy_page(void *to, void *from); void copy_page(void *to, void *from);
extern unsigned long __phys_addr(unsigned long);
#define __phys_reloc_hide(x) (x)
/* /*
* These are used to make use of C type-checking.. * These are used to make use of C type-checking..
*/ */
...@@ -174,6 +177,13 @@ static inline pte_t native_make_pte(unsigned long val) ...@@ -174,6 +177,13 @@ static inline pte_t native_make_pte(unsigned long val)
#endif #endif
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define __phys_addr(x) ((x)-PAGE_OFFSET)
#define __phys_reloc_hide(x) RELOC_HIDE((x), 0)
#ifdef CONFIG_FLATMEM
#define pfn_valid(pfn) ((pfn) < max_mapnr)
#endif /* CONFIG_FLATMEM */
#ifdef CONFIG_X86_USE_3DNOW #ifdef CONFIG_X86_USE_3DNOW
#include <asm/mmx.h> #include <asm/mmx.h>
...@@ -299,6 +309,20 @@ static inline pmdval_t native_pmd_val(pmd_t pmd) ...@@ -299,6 +309,20 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
#endif /* CONFIG_PARAVIRT */ #endif /* CONFIG_PARAVIRT */
#define __pa(x) __phys_addr((unsigned long)(x))
/* __pa_symbol should be used for C visible symbols.
This seems to be the official gcc blessed way to do such arithmetic. */
#define __pa_symbol(x) __pa(__phys_reloc_hide((unsigned long)(x)))
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
#define __boot_va(x) __va(x)
#define __boot_pa(x) __pa(x)
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
......
...@@ -29,18 +29,7 @@ extern int page_is_ram(unsigned long pagenr); ...@@ -29,18 +29,7 @@ extern int page_is_ram(unsigned long pagenr);
#define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE) #define VMALLOC_RESERVE ((unsigned long)__VMALLOC_RESERVE)
#define MAXMEM (-__PAGE_OFFSET-__VMALLOC_RESERVE) #define MAXMEM (-__PAGE_OFFSET-__VMALLOC_RESERVE)
#define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)
/* __pa_symbol should be used for C visible symbols.
This seems to be the official gcc blessed way to do such arithmetic. */
#define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x),0))
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#ifdef CONFIG_FLATMEM
#define pfn_valid(pfn) ((pfn) < max_mapnr)
#endif /* CONFIG_FLATMEM */
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
#include <asm-generic/memory_model.h> #include <asm-generic/memory_model.h>
#include <asm-generic/page.h> #include <asm-generic/page.h>
......
...@@ -16,21 +16,8 @@ extern unsigned long phys_base; ...@@ -16,21 +16,8 @@ extern unsigned long phys_base;
#include <asm/bug.h> #include <asm/bug.h>
extern unsigned long __phys_addr(unsigned long);
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#define __pa(x) __phys_addr((unsigned long)(x))
#define __pa_symbol(x) __phys_addr((unsigned long)(x))
#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET))
#define __boot_va(x) __va(x)
#define __boot_pa(x) __pa(x)
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
#define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT)
#define __HAVE_ARCH_GATE_AREA 1 #define __HAVE_ARCH_GATE_AREA 1
#define vmemmap ((struct page *)VMEMMAP_START) #define vmemmap ((struct page *)VMEMMAP_START)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment