18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/* Copyright (C) 2019 Arm Ltd. */
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#ifndef __KVM_ARM_HYPERCALLS_H
58c2ecf20Sopenharmony_ci#define __KVM_ARM_HYPERCALLS_H
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <asm/kvm_emulate.h>
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciint kvm_hvc_call_handler(struct kvm_vcpu *vcpu);
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_cistatic inline u32 smccc_get_function(struct kvm_vcpu *vcpu)
128c2ecf20Sopenharmony_ci{
138c2ecf20Sopenharmony_ci	return vcpu_get_reg(vcpu, 0);
148c2ecf20Sopenharmony_ci}
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic inline unsigned long smccc_get_arg1(struct kvm_vcpu *vcpu)
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	return vcpu_get_reg(vcpu, 1);
198c2ecf20Sopenharmony_ci}
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistatic inline unsigned long smccc_get_arg2(struct kvm_vcpu *vcpu)
228c2ecf20Sopenharmony_ci{
238c2ecf20Sopenharmony_ci	return vcpu_get_reg(vcpu, 2);
248c2ecf20Sopenharmony_ci}
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistatic inline unsigned long smccc_get_arg3(struct kvm_vcpu *vcpu)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci	return vcpu_get_reg(vcpu, 3);
298c2ecf20Sopenharmony_ci}
308c2ecf20Sopenharmony_ci
318c2ecf20Sopenharmony_cistatic inline void smccc_set_retval(struct kvm_vcpu *vcpu,
328c2ecf20Sopenharmony_ci				    unsigned long a0,
338c2ecf20Sopenharmony_ci				    unsigned long a1,
348c2ecf20Sopenharmony_ci				    unsigned long a2,
358c2ecf20Sopenharmony_ci				    unsigned long a3)
368c2ecf20Sopenharmony_ci{
378c2ecf20Sopenharmony_ci	vcpu_set_reg(vcpu, 0, a0);
388c2ecf20Sopenharmony_ci	vcpu_set_reg(vcpu, 1, a1);
398c2ecf20Sopenharmony_ci	vcpu_set_reg(vcpu, 2, a2);
408c2ecf20Sopenharmony_ci	vcpu_set_reg(vcpu, 3, a3);
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci#endif
44