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