GNU Linux-libre 5.15.137-gnu
[releases.git] / arch / x86 / include / asm / pgtable-3level_types.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_X86_PGTABLE_3LEVEL_DEFS_H
3 #define _ASM_X86_PGTABLE_3LEVEL_DEFS_H
4
5 #ifndef __ASSEMBLY__
6 #include <linux/types.h>
7
8 typedef u64     pteval_t;
9 typedef u64     pmdval_t;
10 typedef u64     pudval_t;
11 typedef u64     p4dval_t;
12 typedef u64     pgdval_t;
13 typedef u64     pgprotval_t;
14
15 typedef union {
16         struct {
17                 unsigned long pte_low, pte_high;
18         };
19         pteval_t pte;
20 } pte_t;
21 #endif  /* !__ASSEMBLY__ */
22
23 #define SHARED_KERNEL_PMD       (!static_cpu_has(X86_FEATURE_PTI))
24
25 #define ARCH_PAGE_TABLE_SYNC_MASK       (SHARED_KERNEL_PMD ? 0 : PGTBL_PMD_MODIFIED)
26
27 /*
28  * PGDIR_SHIFT determines what a top-level page table entry can map
29  */
30 #define PGDIR_SHIFT     30
31 #define PTRS_PER_PGD    4
32
33 /*
34  * PMD_SHIFT determines the size of the area a middle-level
35  * page table can map
36  */
37 #define PMD_SHIFT       21
38 #define PTRS_PER_PMD    512
39
40 /*
41  * entries per page directory level
42  */
43 #define PTRS_PER_PTE    512
44
45 #define MAX_POSSIBLE_PHYSMEM_BITS       36
46 #define PGD_KERNEL_START        (CONFIG_PAGE_OFFSET >> PGDIR_SHIFT)
47
48 #endif /* _ASM_X86_PGTABLE_3LEVEL_DEFS_H */