diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-01-30 13:32:44 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 13:32:44 +0100 |
commit | 11b7c7dc945b8802c459baa3304c1b501d2bf872 (patch) | |
tree | e07b1dbc96584362eabcca91f43177e15e0a1ced /include/asm-x86/page_64.h | |
parent | e62f4473f32a882a537b32cb7202da8d5d7c4f1f (diff) |
x86: page.h: move things back to their own files
# HG changeset patch
# User Jeremy Fitzhardinge <jeremy@xensource.com>
# Date 1199321648 28800
# Node ID 22f6a5902285b58bfc1fbbd9e183498c9017bd78
# Parent bba9287641ff90e836d090d80b5c0a846aab7162
x86: page.h: move things back to their own files
Oops, asm/page.h has turned into an #ifdef hellhole. Move
32/64-specific things back to their own headers to make it somewhat
comprehensible...
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include/asm-x86/page_64.h')
-rw-r--r-- | include/asm-x86/page_64.h | 74 |
1 files changed, 69 insertions, 5 deletions
diff --git a/include/asm-x86/page_64.h b/include/asm-x86/page_64.h index 94d4803aab2d..ebf977a809a8 100644 --- a/include/asm-x86/page_64.h +++ b/include/asm-x86/page_64.h @@ -1,17 +1,81 @@ #ifndef _X86_64_PAGE_H #define _X86_64_PAGE_H -#ifdef __KERNEL__ -#ifndef __ASSEMBLY__ +#define PAGETABLE_LEVELS 4 + +#define THREAD_ORDER 1 +#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) +#define CURRENT_MASK (~(THREAD_SIZE-1)) + +#define EXCEPTION_STACK_ORDER 0 +#define EXCEPTION_STKSZ (PAGE_SIZE << EXCEPTION_STACK_ORDER) + +#define DEBUG_STACK_ORDER (EXCEPTION_STACK_ORDER + 1) +#define DEBUG_STKSZ (PAGE_SIZE << DEBUG_STACK_ORDER) + +#define IRQSTACK_ORDER 2 +#define IRQSTACKSIZE (PAGE_SIZE << IRQSTACK_ORDER) + +#define STACKFAULT_STACK 1 +#define DOUBLEFAULT_STACK 2 +#define NMI_STACK 3 +#define DEBUG_STACK 4 +#define MCE_STACK 5 +#define N_EXCEPTION_STACKS 5 /* hw limit: 7 */ + +#define __PAGE_OFFSET _AC(0xffff810000000000, UL) + +#define __PHYSICAL_START CONFIG_PHYSICAL_START +#define __KERNEL_ALIGN 0x200000 -#endif /* !__ASSEMBLY__ */ +/* + * Make sure kernel is aligned to 2MB address. Catching it at compile + * time is better. Change your config file and compile the kernel + * for a 2MB aligned address (CONFIG_PHYSICAL_START) + */ +#if (CONFIG_PHYSICAL_START % __KERNEL_ALIGN) != 0 +#error "CONFIG_PHYSICAL_START must be a multiple of 2MB" +#endif + +#define __START_KERNEL (__START_KERNEL_map + __PHYSICAL_START) +#define __START_KERNEL_map _AC(0xffffffff80000000, UL) + +/* See Documentation/x86_64/mm.txt for a description of the memory map. */ +#define __PHYSICAL_MASK_SHIFT 46 +#define __VIRTUAL_MASK_SHIFT 48 + +#define KERNEL_TEXT_SIZE (40*1024*1024) +#define KERNEL_TEXT_START _AC(0xffffffff80000000, UL) #ifndef __ASSEMBLY__ +void clear_page(void *page); +void copy_page(void *to, void *from); + +extern unsigned long end_pfn; +extern unsigned long end_pfn_map; +extern unsigned long phys_base; + +extern unsigned long __phys_addr(unsigned long); +#define __phys_reloc_hide(x) (x) + +/* + * These are used to make use of C type-checking.. + */ +typedef unsigned long pteval_t; +typedef unsigned long pmdval_t; +typedef unsigned long pudval_t; +typedef unsigned long pgdval_t; +typedef unsigned long pgprotval_t; +typedef unsigned long phys_addr_t; + +typedef struct { pteval_t pte; } pte_t; +#define native_pte_val(x) ((x).pte) +#define native_make_pte(x) ((pte_t) { (x) } ) -#endif /* __ASSEMBLY__ */ +#define vmemmap ((struct page *)VMEMMAP_START) -#endif /* __KERNEL__ */ +#endif /* !__ASSEMBLY__ */ #ifdef CONFIG_FLATMEM #define pfn_valid(pfn) ((pfn) < end_pfn) |