2019-06-03 08:44:50 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2012-12-12 22:52:05 +04:00
/*
* Copyright ( C ) 2012 , 2013 - ARM Ltd
* Author : Marc Zyngier < marc . zyngier @ arm . com >
*/
2018-02-06 20:56:08 +03:00
# ifndef __KVM_ARM_PSCI_H__
# define __KVM_ARM_PSCI_H__
2012-12-12 22:52:05 +04:00
2018-02-06 20:56:13 +03:00
# include <linux/kvm_host.h>
2018-02-06 20:56:09 +03:00
# include <uapi/linux/psci.h>
# define KVM_ARM_PSCI_0_1 PSCI_VERSION(0, 1)
# define KVM_ARM_PSCI_0_2 PSCI_VERSION(0, 2)
2018-02-06 20:56:11 +03:00
# define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0)
2022-02-21 18:35:22 +03:00
# define KVM_ARM_PSCI_1_1 PSCI_VERSION(1, 1)
2018-02-06 20:56:11 +03:00
2022-02-21 18:35:22 +03:00
# define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_1
2014-04-29 09:54:16 +04:00
2022-02-08 04:27:05 +03:00
static inline int kvm_psci_version ( struct kvm_vcpu * vcpu )
2018-02-06 20:56:13 +03:00
{
/*
* Our PSCI implementation stays the same across versions from
* v0 .2 onward , only adding the few mandatory functions ( such
* as FEATURES with 1.0 ) that are required by newer
2018-01-21 19:42:56 +03:00
* revisions . It is thus safe to return the latest , unless
* userspace has instructed us otherwise .
2018-02-06 20:56:13 +03:00
*/
2018-01-21 19:42:56 +03:00
if ( test_bit ( KVM_ARM_VCPU_PSCI_0_2 , vcpu - > arch . features ) ) {
if ( vcpu - > kvm - > arch . psci_version )
return vcpu - > kvm - > arch . psci_version ;
2018-02-06 20:56:13 +03:00
return KVM_ARM_PSCI_LATEST ;
2018-01-21 19:42:56 +03:00
}
2018-02-06 20:56:13 +03:00
return KVM_ARM_PSCI_0_1 ;
}
2019-10-21 18:28:15 +03:00
int kvm_psci_call ( struct kvm_vcpu * vcpu ) ;
2012-12-12 22:52:05 +04:00
2018-02-06 20:56:08 +03:00
# endif /* __KVM_ARM_PSCI_H__ */