#ifndef ASM_X86__PAGE_32_H #define ASM_X86__PAGE_32_H /* * This handles the memory map. * * A __PAGE_OFFSET of 0xC0000000 means that the kernel has * a virtual address space of one gigabyte, which limits the * amount of physical memory you can use to about 950MB. * * If you want more physical memory than this then see the CONFIG_HIGHMEM4G * and CONFIG_HIGHMEM64G options in the kernel configuration. */ #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL) #ifdef CONFIG_4KSTACKS #define THREAD_ORDER 0 #else #define THREAD_ORDER 1 #endif #define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER) #define STACKFAULT_STACK 0 #define DOUBLEFAULT_STACK 1 #define NMI_STACK 0 #define DEBUG_STACK 0 #define MCE_STACK 0 #define N_EXCEPTION_STACKS 1 #ifdef CONFIG_X86_PAE /* 44=32+12, the limit we can fit into an unsigned long pfn */ #define __PHYSICAL_MASK_SHIFT 44 #define __VIRTUAL_MASK_SHIFT 32 #define PAGETABLE_LEVELS 3 #ifndef __ASSEMBLY__ typedef u64 pteval_t; typedef u64 pmdval_t; typedef u64 pudval_t; typedef u64 pgdval_t; typedef u64 pgprotval_t; typedef union { struct { unsigned long pte_low, pte_high; }; pteval_t pte; } pte_t; #endif /* __ASSEMBLY__ */ #else /* !CONFIG_X86_PAE */ #define __PHYSICAL_MASK_SHIFT 32 #define __VIRTUAL_MASK_SHIFT 32 #define PAGETABLE_LEVELS 2 #ifndef __ASSEMBLY__ 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 union { pteval_t pte; pteval_t pte_low; } pte_t; #endif /* __ASSEMBLY__ */ #endif /* CONFIG_X86_PAE */ #ifndef __ASSEMBLY__ typedef struct page *pgtable_t; #endif #ifdef CONFIG_HUGETLB_PAGE #define HAVE_ARCH_HUGETLB_UNMAPPED_AREA #endif #ifndef __ASSEMBLY__ #define __phys_addr_nodebug(x) ((x) - PAGE_OFFSET) #ifdef CONFIG_DEBUG_VIRTUAL extern unsigned long __phys_addr(unsigned long); #else #define __phys_addr(x) __phys_addr_nodebug(x) #endif #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) #ifdef CONFIG_FLATMEM #define pfn_valid(pfn) ((pfn) < max_mapnr) #endif /* CONFIG_FLATMEM */ extern int nx_enabled; /* * This much address space is reserved for vmalloc() and iomap() * as well as fixmap mappings. */ extern unsigned int __VMALLOC_RESERVE; extern int sysctl_legacy_va_layout; extern void find_low_pfn_range(void); extern unsigned long init_memory_mapping(unsigned long start, unsigned long end); extern void initmem_init(unsigned long, unsigned long); extern void free_initmem(void); extern void setup_bootmem_allocator(void); #ifdef CONFIG_X86_USE_3DNOW #include static inline void clear_page(void *page) { mmx_clear_page(page); } static inline void copy_page(void *to, void *from) { mmx_copy_page(to, from); } #else /* !CONFIG_X86_USE_3DNOW */ #include static inline void clear_page(void *page) { memset(page, 0, PAGE_SIZE); } static inline void copy_page(void *to, void *from) { memcpy(to, from, PAGE_SIZE); } #endif /* CONFIG_X86_3DNOW */ #endif /* !__ASSEMBLY__ */ #endif /* ASM_X86__PAGE_32_H */