56 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright (C) 2019 Arm Ltd. */3 4#ifndef __KVM_ARM_HYPERCALLS_H5#define __KVM_ARM_HYPERCALLS_H6 7#include <asm/kvm_emulate.h>8 9int kvm_smccc_call_handler(struct kvm_vcpu *vcpu);10 11static inline u32 smccc_get_function(struct kvm_vcpu *vcpu)12{13 return vcpu_get_reg(vcpu, 0);14}15 16static inline unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu)17{18 return vcpu_get_reg(vcpu, 1);19}20 21static inline unsigned long smccc_get_arg2(struct kvm_vcpu *vcpu)22{23 return vcpu_get_reg(vcpu, 2);24}25 26static inline unsigned long smccc_get_arg3(struct kvm_vcpu *vcpu)27{28 return vcpu_get_reg(vcpu, 3);29}30 31static inline void smccc_set_retval(struct kvm_vcpu *vcpu,32 unsigned long a0,33 unsigned long a1,34 unsigned long a2,35 unsigned long a3)36{37 vcpu_set_reg(vcpu, 0, a0);38 vcpu_set_reg(vcpu, 1, a1);39 vcpu_set_reg(vcpu, 2, a2);40 vcpu_set_reg(vcpu, 3, a3);41}42 43struct kvm_one_reg;44 45void kvm_arm_init_hypercalls(struct kvm *kvm);46void kvm_arm_teardown_hypercalls(struct kvm *kvm);47int kvm_arm_get_fw_num_regs(struct kvm_vcpu *vcpu);48int kvm_arm_copy_fw_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices);49int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg);50int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg);51 52int kvm_vm_smccc_has_attr(struct kvm *kvm, struct kvm_device_attr *attr);53int kvm_vm_smccc_set_attr(struct kvm *kvm, struct kvm_device_attr *attr);54 55#endif56