162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __KVM_X86_SGX_H
362306a36Sopenharmony_ci#define __KVM_X86_SGX_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/kvm_host.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "capabilities.h"
862306a36Sopenharmony_ci#include "vmx_ops.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifdef CONFIG_X86_SGX_KVM
1162306a36Sopenharmony_ciextern bool __read_mostly enable_sgx;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ciint handle_encls(struct kvm_vcpu *vcpu);
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_civoid setup_default_sgx_lepubkeyhash(void);
1662306a36Sopenharmony_civoid vcpu_setup_sgx_lepubkeyhash(struct kvm_vcpu *vcpu);
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_civoid vmx_write_encls_bitmap(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12);
1962306a36Sopenharmony_ci#else
2062306a36Sopenharmony_ci#define enable_sgx 0
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistatic inline void setup_default_sgx_lepubkeyhash(void) { }
2362306a36Sopenharmony_cistatic inline void vcpu_setup_sgx_lepubkeyhash(struct kvm_vcpu *vcpu) { }
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic inline void vmx_write_encls_bitmap(struct kvm_vcpu *vcpu,
2662306a36Sopenharmony_ci					  struct vmcs12 *vmcs12)
2762306a36Sopenharmony_ci{
2862306a36Sopenharmony_ci	/* Nothing to do if hardware doesn't support SGX */
2962306a36Sopenharmony_ci	if (cpu_has_vmx_encls_vmexit())
3062306a36Sopenharmony_ci		vmcs_write64(ENCLS_EXITING_BITMAP, -1ull);
3162306a36Sopenharmony_ci}
3262306a36Sopenharmony_ci#endif
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#endif /* __KVM_X86_SGX_H */
35