xref: /minix3/minix/servers/vm/arch/earm/pagetable.h (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1*433d6423SLionel Sambuc 
2*433d6423SLionel Sambuc #ifndef _PAGETABLE_H
3*433d6423SLionel Sambuc #define _PAGETABLE_H 1
4*433d6423SLionel Sambuc 
5*433d6423SLionel Sambuc #include <stdint.h>
6*433d6423SLionel Sambuc #include <machine/vm.h>
7*433d6423SLionel Sambuc 
8*433d6423SLionel Sambuc #include "vm.h"
9*433d6423SLionel Sambuc 
10*433d6423SLionel Sambuc /* Mapping flags. */
11*433d6423SLionel Sambuc #define PTF_WRITE	ARM_VM_PTE_RW
12*433d6423SLionel Sambuc #define PTF_READ	ARM_VM_PTE_RO
13*433d6423SLionel Sambuc #define PTF_PRESENT	ARM_VM_PTE_PRESENT
14*433d6423SLionel Sambuc #define PTF_SUPER	ARM_VM_PTE_SUPER
15*433d6423SLionel Sambuc #define PTF_USER	ARM_VM_PTE_USER
16*433d6423SLionel Sambuc #define PTF_NOCACHE	ARM_VM_PTE_DEVICE
17*433d6423SLionel Sambuc #define PTF_CACHEWB	ARM_VM_PTE_WB
18*433d6423SLionel Sambuc #define PTF_CACHEWT	ARM_VM_PTE_WT
19*433d6423SLionel Sambuc #define PTF_SHARE	ARM_VM_PTE_S
20*433d6423SLionel Sambuc 
21*433d6423SLionel Sambuc #define ARCH_VM_DIR_ENTRIES     ARM_VM_DIR_ENTRIES
22*433d6423SLionel Sambuc #define ARCH_BIG_PAGE_SIZE      ARM_SECTION_SIZE
23*433d6423SLionel Sambuc #define ARCH_VM_ADDR_MASK       ARM_VM_ADDR_MASK
24*433d6423SLionel Sambuc #define ARCH_VM_PDE_MASK	ARM_VM_PDE_MASK
25*433d6423SLionel Sambuc #define ARCH_VM_PDE_PRESENT	ARM_VM_PDE_PRESENT
26*433d6423SLionel Sambuc #define ARCH_VM_PTE_PRESENT	ARM_VM_PTE_PRESENT
27*433d6423SLionel Sambuc #define ARCH_VM_PTE_USER	ARM_VM_PTE_USER
28*433d6423SLionel Sambuc #define ARCH_PAGEDIR_SIZE	ARM_PAGEDIR_SIZE
29*433d6423SLionel Sambuc #define ARCH_VM_PTE_RW		ARM_VM_PTE_RW
30*433d6423SLionel Sambuc #define ARCH_VM_BIGPAGE		ARM_VM_SECTION
31*433d6423SLionel Sambuc #define ARCH_VM_PT_ENTRIES	ARM_VM_PT_ENTRIES
32*433d6423SLionel Sambuc #define ARCH_VM_PTE_RO		ARM_VM_PTE_RO
33*433d6423SLionel Sambuc 
34*433d6423SLionel Sambuc /* For arch-specific PT routines to check if no bits outside
35*433d6423SLionel Sambuc  * the regular flags are set.
36*433d6423SLionel Sambuc  */
37*433d6423SLionel Sambuc #define PTF_ALLFLAGS	(PTF_READ|PTF_WRITE|PTF_PRESENT|PTF_SUPER|PTF_USER|PTF_NOCACHE|PTF_CACHEWB|PTF_CACHEWT|PTF_SHARE)
38*433d6423SLionel Sambuc 
39*433d6423SLionel Sambuc #define PFERR_PROT(e)	((ARM_VM_PFE_FS(e) == ARM_VM_PFE_L1PERM) \
40*433d6423SLionel Sambuc 			 || (ARM_VM_PFE_FS(e) == ARM_VM_PFE_L2PERM))
41*433d6423SLionel Sambuc #define PFERR_NOPAGE(e) (!PFERR_PROT(e))
42*433d6423SLionel Sambuc #define PFERR_WRITE(e)	((e) & ARM_VM_PFE_W)
43*433d6423SLionel Sambuc #define PFERR_READ(e)	(!((e) & ARM_VM_PFE_W))
44*433d6423SLionel Sambuc 
45*433d6423SLionel Sambuc #define VM_PAGE_SIZE    ARM_PAGE_SIZE
46*433d6423SLionel Sambuc 
47*433d6423SLionel Sambuc /* virtual address -> pde, pte macros */
48*433d6423SLionel Sambuc #define ARCH_VM_PTE(v) ARM_VM_PTE(v)
49*433d6423SLionel Sambuc #define ARCH_VM_PDE(v) ARM_VM_PDE(v)
50*433d6423SLionel Sambuc 
51*433d6423SLionel Sambuc #endif
52*433d6423SLionel Sambuc 
53