11965aae3c98397aad957412413c07e97b1bd4e64H. Peter Anvin#ifndef _ASM_X86_PAGE_H 21965aae3c98397aad957412413c07e97b1bd4e64H. Peter Anvin#define _ASM_X86_PAGE_H 383a5101bf2fa7dcf09ffd436078a021d32c97f85Jeremy Fitzhardinge 456cefcea7c8769ffc04a5609e6ac849e36685468Ingo Molnar#include <linux/types.h> 556cefcea7c8769ffc04a5609e6ac849e36685468Ingo Molnar 611b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge#ifdef __KERNEL__ 711b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge 851c78eb3f0eb033f9fb4f2316851df1d9b07b953Jeremy Fitzhardinge#include <asm/page_types.h> 983a5101bf2fa7dcf09ffd436078a021d32c97f85Jeremy Fitzhardinge 1083a5101bf2fa7dcf09ffd436078a021d32c97f85Jeremy Fitzhardinge#ifdef CONFIG_X86_64 1111b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge#include <asm/page_64.h> 1211b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge#else 1311b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge#include <asm/page_32.h> 1483a5101bf2fa7dcf09ffd436078a021d32c97f85Jeremy Fitzhardinge#endif /* CONFIG_X86_64 */ 1583a5101bf2fa7dcf09ffd436078a021d32c97f85Jeremy Fitzhardinge 16345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge#ifndef __ASSEMBLY__ 175f5192b9feeff6a96c97c143c3ca558fdbe2dc8eThomas Gleixner 18345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardingestruct page; 19345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 200e691cf824f76adefb4498fe39c300aba2c2575aYinghai Lu#include <linux/range.h> 210e691cf824f76adefb4498fe39c300aba2c2575aYinghai Luextern struct range pfn_mapped[]; 220e691cf824f76adefb4498fe39c300aba2c2575aYinghai Luextern int nr_pfn_mapped; 230e691cf824f76adefb4498fe39c300aba2c2575aYinghai Lu 24f2f7abcb96f03a7a42c13063ad556fc80e345c71Chuck Leverstatic inline void clear_user_page(void *page, unsigned long vaddr, 2551c78eb3f0eb033f9fb4f2316851df1d9b07b953Jeremy Fitzhardinge struct page *pg) 26345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge{ 27345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge clear_page(page); 28345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge} 29345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 30f2f7abcb96f03a7a42c13063ad556fc80e345c71Chuck Leverstatic inline void copy_user_page(void *to, void *from, unsigned long vaddr, 3151c78eb3f0eb033f9fb4f2316851df1d9b07b953Jeremy Fitzhardinge struct page *topage) 32345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge{ 33345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge copy_page(to, from); 34345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge} 35345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 36345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \ 37345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) 38345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE 39345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 4098fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define __pa(x) __phys_addr((unsigned long)(x)) 41af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum#define __pa_nodebug(x) __phys_addr_nodebug((unsigned long)(x)) 4298fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge/* __pa_symbol should be used for C visible symbols. 4398fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge This seems to be the official gcc blessed way to do such arithmetic. */ 448fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim/* 458fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim * We need __phys_reloc_hide() here because gcc may assume that there is no 468fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim * overflow during __pa() calculation and can optimize it unexpectedly. 478fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim * Newer versions of gcc provide -fno-strict-overflow switch to handle this 488fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim * case properly. Once all supported versions of gcc understand it, we can 498fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim * remove this Voodoo magic stuff. (i.e. once gcc3.x is deprecated) 508fd49936a8cac246fc9ed85508556c82cd44cf68Namhyung Kim */ 517d74275d39def4d3ccc8cf4725388bf79ef13861Alexander Duyck#define __pa_symbol(x) \ 527d74275d39def4d3ccc8cf4725388bf79ef13861Alexander Duyck __phys_addr_symbol(__phys_reloc_hide((unsigned long)(x))) 5398fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge 5498fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define __va(x) ((void *)((unsigned long)(x)+PAGE_OFFSET)) 5598fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge 5698fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define __boot_va(x) __va(x) 5798fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define __boot_pa(x) __pa(x) 5898fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge 59af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum/* 60af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum * virt_to_page(kaddr) returns a valid pointer if and only if 61af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum * virt_addr_valid(kaddr) returns true. 62af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum */ 6398fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 6498fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge#define pfn_to_kaddr(pfn) __va((pfn) << PAGE_SHIFT) 65af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossumextern bool __virt_addr_valid(unsigned long kaddr); 66af5c2bd16ac2e5688c3bf46ea1f95112d696d294Vegard Nossum#define virt_addr_valid(kaddr) __virt_addr_valid((unsigned long) (kaddr)) 6798fd5aee348f0420afd1c636790d50aaaec6ceecJeremy Fitzhardinge 68345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge#endif /* __ASSEMBLY__ */ 69345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 70e62f4473f32a882a537b32cb7202da8d5d7c4f1fJeremy Fitzhardinge#include <asm-generic/memory_model.h> 715b17e1cd8928ae65932758ce6478ac6d3e9a86b2Arnd Bergmann#include <asm-generic/getorder.h> 72e62f4473f32a882a537b32cb7202da8d5d7c4f1fJeremy Fitzhardinge 73fd8526ad14c182605e42b64646344b95befd9f94Kirill A. Shutemov#define HAVE_ARCH_HUGETLB_UNMAPPED_AREA 74345b904c3f7c24fbfadfee7cddd5896d13b176d9Jeremy Fitzhardinge 7511b7c7dc945b8802c459baa3304c1b501d2bf872Jeremy Fitzhardinge#endif /* __KERNEL__ */ 761965aae3c98397aad957412413c07e97b1bd4e64H. Peter Anvin#endif /* _ASM_X86_PAGE_H */ 77