1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2024b246eSLinus Torvalds #ifndef _ALPHA_PAGE_H 3024b246eSLinus Torvalds #define _ALPHA_PAGE_H 4024b246eSLinus Torvalds 5024b246eSLinus Torvalds #include <linux/const.h> 6024b246eSLinus Torvalds #include <asm/pal.h> 7024b246eSLinus Torvalds 8024b246eSLinus Torvalds /* PAGE_SHIFT determines the page size */ 9024b246eSLinus Torvalds #define PAGE_SHIFT 13 10024b246eSLinus Torvalds #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) 11024b246eSLinus Torvalds #define PAGE_MASK (~(PAGE_SIZE-1)) 12024b246eSLinus Torvalds 13024b246eSLinus Torvalds #ifndef __ASSEMBLY__ 14024b246eSLinus Torvalds 15024b246eSLinus Torvalds #define STRICT_MM_TYPECHECKS 16024b246eSLinus Torvalds 17024b246eSLinus Torvalds extern void clear_page(void *page); 18024b246eSLinus Torvalds #define clear_user_page(page, vaddr, pg) clear_page(page) 19024b246eSLinus Torvalds 20*6bc56a4dSMatthew Wilcox (Oracle) #define vma_alloc_zeroed_movable_folio(vma, vaddr) \ 21*6bc56a4dSMatthew Wilcox (Oracle) vma_alloc_folio(GFP_HIGHUSER_MOVABLE | __GFP_ZERO, 0, vma, vaddr, false) 22024b246eSLinus Torvalds 23024b246eSLinus Torvalds extern void copy_page(void * _to, void * _from); 24024b246eSLinus Torvalds #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) 25024b246eSLinus Torvalds 26024b246eSLinus Torvalds #ifdef STRICT_MM_TYPECHECKS 27024b246eSLinus Torvalds /* 28024b246eSLinus Torvalds * These are used to make use of C type-checking.. 29024b246eSLinus Torvalds */ 30024b246eSLinus Torvalds typedef struct { unsigned long pte; } pte_t; 31024b246eSLinus Torvalds typedef struct { unsigned long pmd; } pmd_t; 32024b246eSLinus Torvalds typedef struct { unsigned long pgd; } pgd_t; 33024b246eSLinus Torvalds typedef struct { unsigned long pgprot; } pgprot_t; 34024b246eSLinus Torvalds 35024b246eSLinus Torvalds #define pte_val(x) ((x).pte) 36024b246eSLinus Torvalds #define pmd_val(x) ((x).pmd) 37024b246eSLinus Torvalds #define pgd_val(x) ((x).pgd) 38024b246eSLinus Torvalds #define pgprot_val(x) ((x).pgprot) 39024b246eSLinus Torvalds 40024b246eSLinus Torvalds #define __pte(x) ((pte_t) { (x) } ) 41024b246eSLinus Torvalds #define __pmd(x) ((pmd_t) { (x) } ) 42024b246eSLinus Torvalds #define __pgd(x) ((pgd_t) { (x) } ) 43024b246eSLinus Torvalds #define __pgprot(x) ((pgprot_t) { (x) } ) 44024b246eSLinus Torvalds 45024b246eSLinus Torvalds #else 46024b246eSLinus Torvalds /* 47024b246eSLinus Torvalds * .. while these make it easier on the compiler 48024b246eSLinus Torvalds */ 49024b246eSLinus Torvalds typedef unsigned long pte_t; 50024b246eSLinus Torvalds typedef unsigned long pmd_t; 51024b246eSLinus Torvalds typedef unsigned long pgd_t; 52024b246eSLinus Torvalds typedef unsigned long pgprot_t; 53024b246eSLinus Torvalds 54024b246eSLinus Torvalds #define pte_val(x) (x) 55024b246eSLinus Torvalds #define pmd_val(x) (x) 56024b246eSLinus Torvalds #define pgd_val(x) (x) 57024b246eSLinus Torvalds #define pgprot_val(x) (x) 58024b246eSLinus Torvalds 59024b246eSLinus Torvalds #define __pte(x) (x) 60024b246eSLinus Torvalds #define __pgd(x) (x) 61024b246eSLinus Torvalds #define __pgprot(x) (x) 62024b246eSLinus Torvalds 63024b246eSLinus Torvalds #endif /* STRICT_MM_TYPECHECKS */ 64024b246eSLinus Torvalds 65024b246eSLinus Torvalds typedef struct page *pgtable_t; 66024b246eSLinus Torvalds 67024b246eSLinus Torvalds #ifdef USE_48_BIT_KSEG 68024b246eSLinus Torvalds #define PAGE_OFFSET 0xffff800000000000UL 69024b246eSLinus Torvalds #else 70024b246eSLinus Torvalds #define PAGE_OFFSET 0xfffffc0000000000UL 71024b246eSLinus Torvalds #endif 72024b246eSLinus Torvalds 73024b246eSLinus Torvalds #else 74024b246eSLinus Torvalds 75024b246eSLinus Torvalds #ifdef USE_48_BIT_KSEG 76024b246eSLinus Torvalds #define PAGE_OFFSET 0xffff800000000000 77024b246eSLinus Torvalds #else 78024b246eSLinus Torvalds #define PAGE_OFFSET 0xfffffc0000000000 79024b246eSLinus Torvalds #endif 80024b246eSLinus Torvalds 81024b246eSLinus Torvalds #endif /* !__ASSEMBLY__ */ 82024b246eSLinus Torvalds 83024b246eSLinus Torvalds #define __pa(x) ((unsigned long) (x) - PAGE_OFFSET) 84024b246eSLinus Torvalds #define __va(x) ((void *)((unsigned long) (x) + PAGE_OFFSET)) 85024b246eSLinus Torvalds 8636d40290SMike Rapoport #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 8736d40290SMike Rapoport #define virt_addr_valid(kaddr) pfn_valid((__pa(kaddr) >> PAGE_SHIFT)) 8836d40290SMike Rapoport 89024b246eSLinus Torvalds #include <asm-generic/memory_model.h> 905b17e1cdSArnd Bergmann #include <asm-generic/getorder.h> 91024b246eSLinus Torvalds 92024b246eSLinus Torvalds #endif /* _ALPHA_PAGE_H */ 93