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