xref: /kvm-unit-tests/lib/x86/asm/page.h (revision d10d16e1f08659f8fb2ff66b26771933cf5db072)
13e394a58SAlexander Gordeev #ifndef _ASM_X86_PAGE_H_
23e394a58SAlexander Gordeev #define _ASM_X86_PAGE_H_
33e394a58SAlexander Gordeev /*
43e394a58SAlexander Gordeev  * Copyright (C) 2016, Red Hat Inc, Alexander Gordeev <agordeev@redhat.com>
53e394a58SAlexander Gordeev  *
63e394a58SAlexander Gordeev  * This work is licensed under the terms of the GNU LGPL, version 2.
73e394a58SAlexander Gordeev  */
83e394a58SAlexander Gordeev 
93e394a58SAlexander Gordeev 
101ad15f10SAlexander Gordeev #include <linux/const.h>
11*d10d16e1SAlexander Gordeev #include <bitops.h>
121ad15f10SAlexander Gordeev 
131ad15f10SAlexander Gordeev #define PAGE_SHIFT	12
141ad15f10SAlexander Gordeev #define PAGE_SIZE	(_AC(1,UL) << PAGE_SHIFT)
151ad15f10SAlexander Gordeev #define PAGE_MASK	(~(PAGE_SIZE-1))
161ad15f10SAlexander Gordeev 
171ad15f10SAlexander Gordeev #ifndef __ASSEMBLY__
181ad15f10SAlexander Gordeev 
193e394a58SAlexander Gordeev #ifdef __x86_64__
203e394a58SAlexander Gordeev #define LARGE_PAGE_SIZE	(512 * PAGE_SIZE)
213e394a58SAlexander Gordeev #else
223e394a58SAlexander Gordeev #define LARGE_PAGE_SIZE	(1024 * PAGE_SIZE)
233e394a58SAlexander Gordeev #endif
243e394a58SAlexander Gordeev 
25*d10d16e1SAlexander Gordeev #define PT_PRESENT_MASK		(1ull << 0)
26*d10d16e1SAlexander Gordeev #define PT_WRITABLE_MASK	(1ull << 1)
27*d10d16e1SAlexander Gordeev #define PT_USER_MASK		(1ull << 2)
28*d10d16e1SAlexander Gordeev #define PT_ACCESSED_MASK	(1ull << 5)
29*d10d16e1SAlexander Gordeev #define PT_DIRTY_MASK		(1ull << 6)
30*d10d16e1SAlexander Gordeev #define PT_PAGE_SIZE_MASK	(1ull << 7)
31*d10d16e1SAlexander Gordeev #define PT64_NX_MASK		(1ull << 63)
32*d10d16e1SAlexander Gordeev #define PT_ADDR_MASK		GENMASK_ULL(51, 12)
333e394a58SAlexander Gordeev 
343e394a58SAlexander Gordeev #ifdef __x86_64__
353e394a58SAlexander Gordeev #define	PAGE_LEVEL	4
363e394a58SAlexander Gordeev #define	PGDIR_WIDTH	9
373e394a58SAlexander Gordeev #define	PGDIR_MASK	511
383e394a58SAlexander Gordeev #else
393e394a58SAlexander Gordeev #define	PAGE_LEVEL	2
403e394a58SAlexander Gordeev #define	PGDIR_WIDTH	10
413e394a58SAlexander Gordeev #define	PGDIR_MASK	1023
423e394a58SAlexander Gordeev #endif
433e394a58SAlexander Gordeev 
441ad15f10SAlexander Gordeev #endif /* !__ASSEMBLY__ */
453e394a58SAlexander Gordeev #endif
46