162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2012,2013 - ARM Ltd 462306a36Sopenharmony_ci * Author: Marc Zyngier <marc.zyngier@arm.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __KVM_ARM_PSCI_H__ 862306a36Sopenharmony_ci#define __KVM_ARM_PSCI_H__ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/kvm_host.h> 1162306a36Sopenharmony_ci#include <uapi/linux/psci.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define KVM_ARM_PSCI_0_1 PSCI_VERSION(0, 1) 1462306a36Sopenharmony_ci#define KVM_ARM_PSCI_0_2 PSCI_VERSION(0, 2) 1562306a36Sopenharmony_ci#define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0) 1662306a36Sopenharmony_ci#define KVM_ARM_PSCI_1_1 PSCI_VERSION(1, 1) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_1 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic inline int kvm_psci_version(struct kvm_vcpu *vcpu) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci /* 2362306a36Sopenharmony_ci * Our PSCI implementation stays the same across versions from 2462306a36Sopenharmony_ci * v0.2 onward, only adding the few mandatory functions (such 2562306a36Sopenharmony_ci * as FEATURES with 1.0) that are required by newer 2662306a36Sopenharmony_ci * revisions. It is thus safe to return the latest, unless 2762306a36Sopenharmony_ci * userspace has instructed us otherwise. 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci if (test_bit(KVM_ARM_VCPU_PSCI_0_2, vcpu->arch.features)) { 3062306a36Sopenharmony_ci if (vcpu->kvm->arch.psci_version) 3162306a36Sopenharmony_ci return vcpu->kvm->arch.psci_version; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci return KVM_ARM_PSCI_LATEST; 3462306a36Sopenharmony_ci } 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci return KVM_ARM_PSCI_0_1; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciint kvm_psci_call(struct kvm_vcpu *vcpu); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#endif /* __KVM_ARM_PSCI_H__ */ 43