xref: /kvm-unit-tests/lib/arm/asm/mmu.h (revision 153d193674069bd25373e1dce6bdc9a1b86e0e33)
1 #ifndef __ASMARM_MMU_H_
2 #define __ASMARM_MMU_H_
3 /*
4  * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5  *
6  * This work is licensed under the terms of the GNU LGPL, version 2.
7  */
8 #include "asm/page.h"
9 #include "asm/barrier.h"
10 #include "alloc.h"
11 
12 #define PTRS_PER_PGD	4
13 #define PGDIR_SHIFT	30
14 #define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
15 #define PGDIR_MASK	(~((1 << PGDIR_SHIFT) - 1))
16 
17 #define pgd_free(pgd) free(pgd)
18 static inline pgd_t *pgd_alloc(void)
19 {
20 	pgd_t *pgd = memalign(L1_CACHE_BYTES, PTRS_PER_PGD * sizeof(pgd_t));
21 	memset(pgd, 0, PTRS_PER_PGD * sizeof(pgd_t));
22 	return pgd;
23 }
24 
25 static inline void local_flush_tlb_all(void)
26 {
27 	asm volatile("mcr p15, 0, %0, c8, c7, 0" :: "r" (0));
28 	dsb();
29 	isb();
30 }
31 
32 static inline void flush_tlb_all(void)
33 {
34 	//TODO
35 	local_flush_tlb_all();
36 }
37 
38 extern bool mmu_enabled(void);
39 extern void mmu_enable(pgd_t *pgtable);
40 extern void mmu_enable_idmap(void);
41 extern void mmu_init_io_sect(pgd_t *pgtable);
42 
43 #endif /* __ASMARM_MMU_H_ */
44