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