162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __ASM_KVM_BOOK3S_UVMEM_H__
362306a36Sopenharmony_ci#define __ASM_KVM_BOOK3S_UVMEM_H__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifdef CONFIG_PPC_UV
662306a36Sopenharmony_ciint kvmppc_uvmem_init(void);
762306a36Sopenharmony_civoid kvmppc_uvmem_free(void);
862306a36Sopenharmony_cibool kvmppc_uvmem_available(void);
962306a36Sopenharmony_ciint kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot);
1062306a36Sopenharmony_civoid kvmppc_uvmem_slot_free(struct kvm *kvm,
1162306a36Sopenharmony_ci			    const struct kvm_memory_slot *slot);
1262306a36Sopenharmony_ciunsigned long kvmppc_h_svm_page_in(struct kvm *kvm,
1362306a36Sopenharmony_ci				   unsigned long gra,
1462306a36Sopenharmony_ci				   unsigned long flags,
1562306a36Sopenharmony_ci				   unsigned long page_shift);
1662306a36Sopenharmony_ciunsigned long kvmppc_h_svm_page_out(struct kvm *kvm,
1762306a36Sopenharmony_ci				    unsigned long gra,
1862306a36Sopenharmony_ci				    unsigned long flags,
1962306a36Sopenharmony_ci				    unsigned long page_shift);
2062306a36Sopenharmony_ciunsigned long kvmppc_h_svm_init_start(struct kvm *kvm);
2162306a36Sopenharmony_ciunsigned long kvmppc_h_svm_init_done(struct kvm *kvm);
2262306a36Sopenharmony_ciint kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn);
2362306a36Sopenharmony_ciunsigned long kvmppc_h_svm_init_abort(struct kvm *kvm);
2462306a36Sopenharmony_civoid kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
2562306a36Sopenharmony_ci			     struct kvm *kvm, bool skip_page_out);
2662306a36Sopenharmony_ciint kvmppc_uvmem_memslot_create(struct kvm *kvm,
2762306a36Sopenharmony_ci		const struct kvm_memory_slot *new);
2862306a36Sopenharmony_civoid kvmppc_uvmem_memslot_delete(struct kvm *kvm,
2962306a36Sopenharmony_ci		const struct kvm_memory_slot *old);
3062306a36Sopenharmony_ci#else
3162306a36Sopenharmony_cistatic inline int kvmppc_uvmem_init(void)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	return 0;
3462306a36Sopenharmony_ci}
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistatic inline void kvmppc_uvmem_free(void) { }
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistatic inline bool kvmppc_uvmem_available(void)
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci	return false;
4162306a36Sopenharmony_ci}
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_cistatic inline int
4462306a36Sopenharmony_cikvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot)
4562306a36Sopenharmony_ci{
4662306a36Sopenharmony_ci	return 0;
4762306a36Sopenharmony_ci}
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cistatic inline void
5062306a36Sopenharmony_cikvmppc_uvmem_slot_free(struct kvm *kvm, const struct kvm_memory_slot *slot) { }
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistatic inline unsigned long
5362306a36Sopenharmony_cikvmppc_h_svm_page_in(struct kvm *kvm, unsigned long gra,
5462306a36Sopenharmony_ci		     unsigned long flags, unsigned long page_shift)
5562306a36Sopenharmony_ci{
5662306a36Sopenharmony_ci	return H_UNSUPPORTED;
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_cistatic inline unsigned long
6062306a36Sopenharmony_cikvmppc_h_svm_page_out(struct kvm *kvm, unsigned long gra,
6162306a36Sopenharmony_ci		      unsigned long flags, unsigned long page_shift)
6262306a36Sopenharmony_ci{
6362306a36Sopenharmony_ci	return H_UNSUPPORTED;
6462306a36Sopenharmony_ci}
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_cistatic inline unsigned long kvmppc_h_svm_init_start(struct kvm *kvm)
6762306a36Sopenharmony_ci{
6862306a36Sopenharmony_ci	return H_UNSUPPORTED;
6962306a36Sopenharmony_ci}
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_cistatic inline unsigned long kvmppc_h_svm_init_done(struct kvm *kvm)
7262306a36Sopenharmony_ci{
7362306a36Sopenharmony_ci	return H_UNSUPPORTED;
7462306a36Sopenharmony_ci}
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistatic inline unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm)
7762306a36Sopenharmony_ci{
7862306a36Sopenharmony_ci	return H_UNSUPPORTED;
7962306a36Sopenharmony_ci}
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_cistatic inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn)
8262306a36Sopenharmony_ci{
8362306a36Sopenharmony_ci	return -EFAULT;
8462306a36Sopenharmony_ci}
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_cistatic inline void
8762306a36Sopenharmony_cikvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
8862306a36Sopenharmony_ci			struct kvm *kvm, bool skip_page_out) { }
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cistatic inline int  kvmppc_uvmem_memslot_create(struct kvm *kvm,
9162306a36Sopenharmony_ci		const struct kvm_memory_slot *new)
9262306a36Sopenharmony_ci{
9362306a36Sopenharmony_ci	return H_UNSUPPORTED;
9462306a36Sopenharmony_ci}
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_cistatic inline void  kvmppc_uvmem_memslot_delete(struct kvm *kvm,
9762306a36Sopenharmony_ci		const struct kvm_memory_slot *old) { }
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci#endif /* CONFIG_PPC_UV */
10062306a36Sopenharmony_ci#endif /* __ASM_KVM_BOOK3S_UVMEM_H__ */
101