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