1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /* Copyright (C) 2019 Arm Ltd. */
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun #ifndef __KVM_ARM_HYPERCALLS_H
5*4882a593Smuzhiyun #define __KVM_ARM_HYPERCALLS_H
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun #include <asm/kvm_emulate.h>
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun int kvm_hvc_call_handler(struct kvm_vcpu *vcpu);
10*4882a593Smuzhiyun
smccc_get_function(struct kvm_vcpu * vcpu)11*4882a593Smuzhiyun static inline u32 smccc_get_function(struct kvm_vcpu *vcpu)
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun return vcpu_get_reg(vcpu, 0);
14*4882a593Smuzhiyun }
15*4882a593Smuzhiyun
smccc_get_arg1(struct kvm_vcpu * vcpu)16*4882a593Smuzhiyun static inline unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu)
17*4882a593Smuzhiyun {
18*4882a593Smuzhiyun return vcpu_get_reg(vcpu, 1);
19*4882a593Smuzhiyun }
20*4882a593Smuzhiyun
smccc_get_arg2(struct kvm_vcpu * vcpu)21*4882a593Smuzhiyun static inline unsigned long smccc_get_arg2(struct kvm_vcpu *vcpu)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun return vcpu_get_reg(vcpu, 2);
24*4882a593Smuzhiyun }
25*4882a593Smuzhiyun
smccc_get_arg3(struct kvm_vcpu * vcpu)26*4882a593Smuzhiyun static inline unsigned long smccc_get_arg3(struct kvm_vcpu *vcpu)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun return vcpu_get_reg(vcpu, 3);
29*4882a593Smuzhiyun }
30*4882a593Smuzhiyun
smccc_set_retval(struct kvm_vcpu * vcpu,unsigned long a0,unsigned long a1,unsigned long a2,unsigned long a3)31*4882a593Smuzhiyun static inline void smccc_set_retval(struct kvm_vcpu *vcpu,
32*4882a593Smuzhiyun unsigned long a0,
33*4882a593Smuzhiyun unsigned long a1,
34*4882a593Smuzhiyun unsigned long a2,
35*4882a593Smuzhiyun unsigned long a3)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun vcpu_set_reg(vcpu, 0, a0);
38*4882a593Smuzhiyun vcpu_set_reg(vcpu, 1, a1);
39*4882a593Smuzhiyun vcpu_set_reg(vcpu, 2, a2);
40*4882a593Smuzhiyun vcpu_set_reg(vcpu, 3, a3);
41*4882a593Smuzhiyun }
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun #endif
44