• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 #ifndef __KVM_HYP_MM_H
3 #define __KVM_HYP_MM_H
4 
5 #include <asm/kvm_pgtable.h>
6 #include <asm/spectre.h>
7 #include <linux/memblock.h>
8 #include <linux/types.h>
9 
10 #include <nvhe/memory.h>
11 #include <nvhe/spinlock.h>
12 
13 extern struct kvm_pgtable pkvm_pgtable;
14 extern hyp_spinlock_t pkvm_pgd_lock;
15 extern const struct pkvm_module_ops module_ops;
16 
17 int hyp_create_fixmap(void);
18 void *hyp_fixmap_map(phys_addr_t phys);
19 void hyp_fixmap_unmap(void);
20 void *hyp_fixblock_map(phys_addr_t phys);
21 void hyp_fixblock_unmap(void);
22 void hyp_poison_page(phys_addr_t phys);
23 
24 int hyp_create_idmap(u32 hyp_va_bits);
25 int hyp_map_vectors(void);
26 int hyp_back_vmemmap(phys_addr_t back);
27 int pkvm_cpu_set_vector(enum arm64_hyp_spectre_vector slot);
28 int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot);
29 int pkvm_create_mappings_locked(void *from, void *to, enum kvm_pgtable_prot prot);
30 int __pkvm_create_private_mapping(phys_addr_t phys, size_t size,
31 				  enum kvm_pgtable_prot prot,
32 				  unsigned long *haddr);
33 int pkvm_create_stack(phys_addr_t phys, unsigned long *haddr);
34 int pkvm_alloc_private_va_range(size_t size, unsigned long *haddr);
35 void pkvm_remove_mappings(void *from, void *to);
36 phys_addr_t __pkvm_private_range_pa(void *va);
37 int __hyp_allocator_map(unsigned long start, phys_addr_t phys);
38 
39 int __pkvm_map_module_page(u64 pfn, void *va, enum kvm_pgtable_prot prot, bool is_protected);
40 void __pkvm_unmap_module_page(u64 pfn, void *va);
41 void *__pkvm_alloc_module_va(u64 nr_pages);
42 #ifdef CONFIG_NVHE_EL2_DEBUG
43 void assert_in_mod_range(unsigned long addr);
44 #else
assert_in_mod_range(unsigned long addr)45 static inline void assert_in_mod_range(unsigned long addr) { }
46 #endif /* CONFIG_NVHE_EL2_DEBUG */
47 #endif /* __KVM_HYP_MM_H */
48