1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_KVM_BOOK3S_UVMEM_H__
3 #define __ASM_KVM_BOOK3S_UVMEM_H__
4 
5 #ifdef CONFIG_PPC_UV
6 int kvmppc_uvmem_init(void);
7 void kvmppc_uvmem_free(void);
8 bool kvmppc_uvmem_available(void);
9 int kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot);
10 void kvmppc_uvmem_slot_free(struct kvm *kvm,
11 			    const struct kvm_memory_slot *slot);
12 unsigned long kvmppc_h_svm_page_in(struct kvm *kvm,
13 				   unsigned long gra,
14 				   unsigned long flags,
15 				   unsigned long page_shift);
16 unsigned long kvmppc_h_svm_page_out(struct kvm *kvm,
17 				    unsigned long gra,
18 				    unsigned long flags,
19 				    unsigned long page_shift);
20 unsigned long kvmppc_h_svm_init_start(struct kvm *kvm);
21 unsigned long kvmppc_h_svm_init_done(struct kvm *kvm);
22 int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn);
23 unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm);
24 void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
25 			     struct kvm *kvm, bool skip_page_out);
26 int kvmppc_uvmem_memslot_create(struct kvm *kvm,
27 		const struct kvm_memory_slot *new);
28 void kvmppc_uvmem_memslot_delete(struct kvm *kvm,
29 		const struct kvm_memory_slot *old);
30 #else
kvmppc_uvmem_init(void)31 static inline int kvmppc_uvmem_init(void)
32 {
33 	return 0;
34 }
35 
kvmppc_uvmem_free(void)36 static inline void kvmppc_uvmem_free(void) { }
37 
kvmppc_uvmem_available(void)38 static inline bool kvmppc_uvmem_available(void)
39 {
40 	return false;
41 }
42 
43 static inline int
kvmppc_uvmem_slot_init(struct kvm * kvm,const struct kvm_memory_slot * slot)44 kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot)
45 {
46 	return 0;
47 }
48 
49 static inline void
kvmppc_uvmem_slot_free(struct kvm * kvm,const struct kvm_memory_slot * slot)50 kvmppc_uvmem_slot_free(struct kvm *kvm, const struct kvm_memory_slot *slot) { }
51 
52 static inline unsigned long
kvmppc_h_svm_page_in(struct kvm * kvm,unsigned long gra,unsigned long flags,unsigned long page_shift)53 kvmppc_h_svm_page_in(struct kvm *kvm, unsigned long gra,
54 		     unsigned long flags, unsigned long page_shift)
55 {
56 	return H_UNSUPPORTED;
57 }
58 
59 static inline unsigned long
kvmppc_h_svm_page_out(struct kvm * kvm,unsigned long gra,unsigned long flags,unsigned long page_shift)60 kvmppc_h_svm_page_out(struct kvm *kvm, unsigned long gra,
61 		      unsigned long flags, unsigned long page_shift)
62 {
63 	return H_UNSUPPORTED;
64 }
65 
kvmppc_h_svm_init_start(struct kvm * kvm)66 static inline unsigned long kvmppc_h_svm_init_start(struct kvm *kvm)
67 {
68 	return H_UNSUPPORTED;
69 }
70 
kvmppc_h_svm_init_done(struct kvm * kvm)71 static inline unsigned long kvmppc_h_svm_init_done(struct kvm *kvm)
72 {
73 	return H_UNSUPPORTED;
74 }
75 
kvmppc_h_svm_init_abort(struct kvm * kvm)76 static inline unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm)
77 {
78 	return H_UNSUPPORTED;
79 }
80 
kvmppc_send_page_to_uv(struct kvm * kvm,unsigned long gfn)81 static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn)
82 {
83 	return -EFAULT;
84 }
85 
86 static inline void
kvmppc_uvmem_drop_pages(const struct kvm_memory_slot * free,struct kvm * kvm,bool skip_page_out)87 kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
88 			struct kvm *kvm, bool skip_page_out) { }
89 
kvmppc_uvmem_memslot_create(struct kvm * kvm,const struct kvm_memory_slot * new)90 static inline int  kvmppc_uvmem_memslot_create(struct kvm *kvm,
91 		const struct kvm_memory_slot *new)
92 {
93 	return H_UNSUPPORTED;
94 }
95 
kvmppc_uvmem_memslot_delete(struct kvm * kvm,const struct kvm_memory_slot * old)96 static inline void  kvmppc_uvmem_memslot_delete(struct kvm *kvm,
97 		const struct kvm_memory_slot *old) { }
98 
99 #endif /* CONFIG_PPC_UV */
100 #endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */
101