2019-06-03 07:44:50 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2012-12-12 18:52:05 +00:00
/*
* Copyright ( C ) 2012 , 2013 - ARM Ltd
* Author : Marc Zyngier < marc . zyngier @ arm . com >
*/
2018-02-06 17:56:08 +00:00
# ifndef __KVM_ARM_PSCI_H__
# define __KVM_ARM_PSCI_H__
2012-12-12 18:52:05 +00:00
2018-02-06 17:56:13 +00:00
# include <linux/kvm_host.h>
2018-02-06 17:56:09 +00: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 17:56:11 +00:00
# define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0)
2022-02-21 15:35:22 +00:00
# define KVM_ARM_PSCI_1_1 PSCI_VERSION(1, 1)
2018-02-06 17:56:11 +00:00
2022-02-21 15:35:22 +00:00
# define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_1
2014-04-29 11:24:16 +05:30
2022-02-08 01:27:05 +00:00
static inline int kvm_psci_version ( struct kvm_vcpu * vcpu )
2018-02-06 17:56:13 +00: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 16:42:56 +00:00
* revisions . It is thus safe to return the latest , unless
* userspace has instructed us otherwise .
2018-02-06 17:56:13 +00:00
*/
2023-09-20 19:50:36 +00:00
if ( vcpu_has_feature ( vcpu , KVM_ARM_VCPU_PSCI_0_2 ) ) {
2018-01-21 16:42:56 +00:00
if ( vcpu - > kvm - > arch . psci_version )
return vcpu - > kvm - > arch . psci_version ;
2018-02-06 17:56:13 +00:00
return KVM_ARM_PSCI_LATEST ;
2018-01-21 16:42:56 +00:00
}
2018-02-06 17:56:13 +00:00
return KVM_ARM_PSCI_0_1 ;
}
2019-10-21 16:28:15 +01:00
int kvm_psci_call ( struct kvm_vcpu * vcpu ) ;
2012-12-12 18:52:05 +00:00
2018-02-06 17:56:08 +00:00
# endif /* __KVM_ARM_PSCI_H__ */