1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (C) 2019 Arm Ltd. */ 3 4 #ifndef __KVM_ARM_HYPERCALLS_H 5 #define __KVM_ARM_HYPERCALLS_H 6 7 #include <asm/kvm_emulate.h> 8 9 int kvm_hvc_call_handler(struct kvm_vcpu *vcpu); 10 11 static inline u32 smccc_get_function(struct kvm_vcpu *vcpu) 12 { 13 return vcpu_get_reg(vcpu, 0); 14 } 15 16 static inline unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu) 17 { 18 return vcpu_get_reg(vcpu, 1); 19 } 20 21 static inline unsigned long smccc_get_arg2(struct kvm_vcpu *vcpu) 22 { 23 return vcpu_get_reg(vcpu, 2); 24 } 25 26 static inline unsigned long smccc_get_arg3(struct kvm_vcpu *vcpu) 27 { 28 return vcpu_get_reg(vcpu, 3); 29 } 30 31 static 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 43 struct kvm_one_reg; 44 45 void kvm_arm_init_hypercalls(struct kvm *kvm); 46 int kvm_arm_get_fw_num_regs(struct kvm_vcpu *vcpu); 47 int kvm_arm_copy_fw_reg_indices(struct kvm_vcpu *vcpu, u64 __user *uindices); 48 int kvm_arm_get_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); 49 int kvm_arm_set_fw_reg(struct kvm_vcpu *vcpu, const struct kvm_one_reg *reg); 50 51 #endif 52