xref: /linux/arch/alpha/include/asm/page.h (revision 12d5fc96ebbb3b948861805b32a4c3a96105ccd9)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ALPHA_PAGE_H
3 #define _ALPHA_PAGE_H
4 
5 #include <linux/const.h>
6 #include <asm/pal.h>
7 #include <vdso/page.h>
8 
9 #ifdef CONFIG_HUGETLB_PAGE
10 /*
11  * The default huge page is the largest granularity hint block, 4MB. All
12  * three hint sizes are registered as hstates, hence HUGE_MAX_HSTATE, which
13  * linux/hugetlb.h needs before it includes asm/hugetlb.h.
14  */
15 #define HPAGE_SHIFT		22
16 #define HPAGE_SIZE		(_AC(1, UL) << HPAGE_SHIFT)
17 #define HPAGE_MASK		(~(HPAGE_SIZE - 1))
18 #define HUGETLB_PAGE_ORDER	(HPAGE_SHIFT - PAGE_SHIFT)
19 #define HUGE_MAX_HSTATE		3
20 #endif
21 
22 #ifndef __ASSEMBLER__
23 
24 #define STRICT_MM_TYPECHECKS
25 
26 extern void clear_page(void *page);
27 
28 #define vma_alloc_zeroed_movable_folio(vma, vaddr) \
29 	vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr)
30 
31 extern void copy_page(void * _to, void * _from);
32 #define copy_user_page(to, from, vaddr, pg)	copy_page(to, from)
33 
34 #ifdef STRICT_MM_TYPECHECKS
35 /*
36  * These are used to make use of C type-checking..
37  */
38 typedef struct { unsigned long pte; } pte_t;
39 typedef struct { unsigned long pmd; } pmd_t;
40 typedef struct { unsigned long pgd; } pgd_t;
41 typedef struct { unsigned long pgprot; } pgprot_t;
42 
43 #define pte_val(x)	((x).pte)
44 #define pmd_val(x)	((x).pmd)
45 #define pgd_val(x)	((x).pgd)
46 #define pgprot_val(x)	((x).pgprot)
47 
48 #define __pte(x)	((pte_t) { (x) } )
49 #define __pmd(x)	((pmd_t) { (x) } )
50 #define __pgd(x)	((pgd_t) { (x) } )
51 #define __pgprot(x)	((pgprot_t) { (x) } )
52 
53 #else
54 /*
55  * .. while these make it easier on the compiler
56  */
57 typedef unsigned long pte_t;
58 typedef unsigned long pmd_t;
59 typedef unsigned long pgd_t;
60 typedef unsigned long pgprot_t;
61 
62 #define pte_val(x)	(x)
63 #define pmd_val(x)	(x)
64 #define pgd_val(x)	(x)
65 #define pgprot_val(x)	(x)
66 
67 #define __pte(x)	(x)
68 #define __pgd(x)	(x)
69 #define __pgprot(x)	(x)
70 
71 #endif /* STRICT_MM_TYPECHECKS */
72 
73 typedef struct page *pgtable_t;
74 
75 #ifdef USE_48_BIT_KSEG
76 #define PAGE_OFFSET		0xffff800000000000UL
77 #else
78 #define PAGE_OFFSET		0xfffffc0000000000UL
79 #endif
80 
81 #else
82 
83 #ifdef USE_48_BIT_KSEG
84 #define PAGE_OFFSET		0xffff800000000000
85 #else
86 #define PAGE_OFFSET		0xfffffc0000000000
87 #endif
88 
89 #endif /* !__ASSEMBLER__ */
90 
91 #define __pa(x)			((unsigned long) (x) - PAGE_OFFSET)
92 #define __va(x)			((void *)((unsigned long) (x) + PAGE_OFFSET))
93 
94 #define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
95 #define virt_addr_valid(kaddr)	pfn_valid((__pa(kaddr) >> PAGE_SHIFT))
96 
97 #include <asm-generic/memory_model.h>
98 #include <asm-generic/getorder.h>
99 
100 #endif /* _ALPHA_PAGE_H */
101