1fd33143eSAndrew Jones #ifndef _ASMARM_PAGE_H_ 2fd33143eSAndrew Jones #define _ASMARM_PAGE_H_ 3fd33143eSAndrew Jones /* 4fd33143eSAndrew Jones * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> 5fd33143eSAndrew Jones * 6fd33143eSAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 7fd33143eSAndrew Jones */ 8fd33143eSAndrew Jones 9f3bd1e05SAndrew Jones #include <linux/const.h> 1009121d03SAndrew Jones 11fd33143eSAndrew Jones #define PAGE_SHIFT 12 1209121d03SAndrew Jones #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) 13fd33143eSAndrew Jones #define PAGE_MASK (~(PAGE_SIZE-1)) 14fd33143eSAndrew Jones 15*0cc3a351SSean Christopherson #ifndef __ASSEMBLER__ 1609121d03SAndrew Jones 1709121d03SAndrew Jones #define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE) 1809121d03SAndrew Jones 197a693feeSAndrew Jones typedef u64 pteval_t; 207a693feeSAndrew Jones typedef u64 pmdval_t; 217a693feeSAndrew Jones typedef u64 pgdval_t; 227a693feeSAndrew Jones typedef struct { pteval_t pte; } pte_t; 237a693feeSAndrew Jones typedef struct { pmdval_t pmd; } pmd_t; 247a693feeSAndrew Jones typedef struct { pgdval_t pgd; } pgd_t; 257a693feeSAndrew Jones typedef struct { pteval_t pgprot; } pgprot_t; 267a693feeSAndrew Jones 277a693feeSAndrew Jones #define pte_val(x) ((x).pte) 287a693feeSAndrew Jones #define pmd_val(x) ((x).pmd) 297a693feeSAndrew Jones #define pgd_val(x) ((x).pgd) 307a693feeSAndrew Jones #define pgprot_val(x) ((x).pgprot) 317a693feeSAndrew Jones 32a2d06852SNikos Nikoleris /* For compatibility with arm64 page tables */ 33a2d06852SNikos Nikoleris #define pud_t pgd_t 34a2d06852SNikos Nikoleris #define pud_val(x) pgd_val(x) 35a2d06852SNikos Nikoleris 367a693feeSAndrew Jones #define __pte(x) ((pte_t) { (x) } ) 377a693feeSAndrew Jones #define __pmd(x) ((pmd_t) { (x) } ) 387a693feeSAndrew Jones #define __pgd(x) ((pgd_t) { (x) } ) 397a693feeSAndrew Jones #define __pgprot(x) ((pgprot_t) { (x) } ) 407a693feeSAndrew Jones 41fd33143eSAndrew Jones #define __va(x) ((void *)__phys_to_virt((phys_addr_t)(x))) 42fd33143eSAndrew Jones #define __pa(x) __virt_to_phys((unsigned long)(x)) 43fd33143eSAndrew Jones 44fd33143eSAndrew Jones #define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) 45fd33143eSAndrew Jones #define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT) 46fd33143eSAndrew Jones 47f02b6363SAndrew Jones extern phys_addr_t __virt_to_phys(unsigned long addr); 48f02b6363SAndrew Jones extern unsigned long __phys_to_virt(phys_addr_t addr); 49f02b6363SAndrew Jones 50e97e1c82SAndrew Jones extern void *__ioremap(phys_addr_t phys_addr, size_t size); 51e97e1c82SAndrew Jones 52*0cc3a351SSean Christopherson #endif /* !__ASSEMBLER__ */ 5309121d03SAndrew Jones #endif /* _ASMARM_PAGE_H_ */ 54