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
6int kvmppc_uvmem_init(void);
7void kvmppc_uvmem_free(void);
8bool kvmppc_uvmem_available(void);
9int kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot);
10void kvmppc_uvmem_slot_free(struct kvm *kvm,
11			    const struct kvm_memory_slot *slot);
12unsigned long kvmppc_h_svm_page_in(struct kvm *kvm,
13				   unsigned long gra,
14				   unsigned long flags,
15				   unsigned long page_shift);
16unsigned long kvmppc_h_svm_page_out(struct kvm *kvm,
17				    unsigned long gra,
18				    unsigned long flags,
19				    unsigned long page_shift);
20unsigned long kvmppc_h_svm_init_start(struct kvm *kvm);
21unsigned long kvmppc_h_svm_init_done(struct kvm *kvm);
22int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn);
23unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm);
24void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
25			     struct kvm *kvm, bool skip_page_out);
26int kvmppc_uvmem_memslot_create(struct kvm *kvm,
27		const struct kvm_memory_slot *new);
28void kvmppc_uvmem_memslot_delete(struct kvm *kvm,
29		const struct kvm_memory_slot *old);
30#else
31static inline int kvmppc_uvmem_init(void)
32{
33	return 0;
34}
35
36static inline void kvmppc_uvmem_free(void) { }
37
38static inline bool kvmppc_uvmem_available(void)
39{
40	return false;
41}
42
43static inline int
44kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot)
45{
46	return 0;
47}
48
49static inline void
50kvmppc_uvmem_slot_free(struct kvm *kvm, const struct kvm_memory_slot *slot) { }
51
52static inline unsigned long
53kvmppc_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
59static inline unsigned long
60kvmppc_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
66static inline unsigned long kvmppc_h_svm_init_start(struct kvm *kvm)
67{
68	return H_UNSUPPORTED;
69}
70
71static inline unsigned long kvmppc_h_svm_init_done(struct kvm *kvm)
72{
73	return H_UNSUPPORTED;
74}
75
76static inline unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm)
77{
78	return H_UNSUPPORTED;
79}
80
81static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn)
82{
83	return -EFAULT;
84}
85
86static inline void
87kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
88			struct kvm *kvm, bool skip_page_out) { }
89
90static inline int  kvmppc_uvmem_memslot_create(struct kvm *kvm,
91		const struct kvm_memory_slot *new)
92{
93	return H_UNSUPPORTED;
94}
95
96static 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