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 31 static inline int kvmppc_uvmem_init(void) 32 { 33 return 0; 34 } 35 36 static inline void kvmppc_uvmem_free(void) { } 37 38 static inline bool kvmppc_uvmem_available(void) 39 { 40 return false; 41 } 42 43 static inline int 44 kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot) 45 { 46 return 0; 47 } 48 49 static inline void 50 kvmppc_uvmem_slot_free(struct kvm *kvm, const struct kvm_memory_slot *slot) { } 51 52 static inline unsigned long 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 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 66 static inline unsigned long kvmppc_h_svm_init_start(struct kvm *kvm) 67 { 68 return H_UNSUPPORTED; 69 } 70 71 static inline unsigned long kvmppc_h_svm_init_done(struct kvm *kvm) 72 { 73 return H_UNSUPPORTED; 74 } 75 76 static inline unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm) 77 { 78 return H_UNSUPPORTED; 79 } 80 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 87 kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free, 88 struct kvm *kvm, bool skip_page_out) { } 89 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 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