aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/include
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2012-12-12 13:52:05 -0500
committerMarc Zyngier <marc.zyngier@arm.com>2013-06-12 11:40:32 -0400
commitdcd2e40c1e1cce302498d16d095b0f8a30326f74 (patch)
tree4cfe34f1c08aa77a4ba14e0c4d38b3c8b044e79c /arch/arm64/include
parent003300de6c3e51934fb52eb2677f6f4fb4996cbd (diff)
arm64: KVM: PSCI implementation
Wire the PSCI backend into the exit handling code. Reviewed-by: Christopher Covington <cov@codeaurora.org> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'arch/arm64/include')
-rw-r--r--arch/arm64/include/asm/kvm_host.h2
-rw-r--r--arch/arm64/include/asm/kvm_psci.h23
-rw-r--r--arch/arm64/include/uapi/asm/kvm.h16
3 files changed, 40 insertions, 1 deletions
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index 2500eb6a4d2a..2fdeb326c3ee 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -34,7 +34,7 @@
34#include <kvm/arm_vgic.h> 34#include <kvm/arm_vgic.h>
35#include <kvm/arm_arch_timer.h> 35#include <kvm/arm_arch_timer.h>
36 36
37#define KVM_VCPU_MAX_FEATURES 0 37#define KVM_VCPU_MAX_FEATURES 1
38 38
39/* We don't currently support large pages. */ 39/* We don't currently support large pages. */
40#define KVM_HPAGE_GFN_SHIFT(x) 0 40#define KVM_HPAGE_GFN_SHIFT(x) 0
diff --git a/arch/arm64/include/asm/kvm_psci.h b/arch/arm64/include/asm/kvm_psci.h
new file mode 100644
index 000000000000..e301a4816355
--- /dev/null
+++ b/arch/arm64/include/asm/kvm_psci.h
@@ -0,0 +1,23 @@
1/*
2 * Copyright (C) 2012,2013 - ARM Ltd
3 * Author: Marc Zyngier <marc.zyngier@arm.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __ARM64_KVM_PSCI_H__
19#define __ARM64_KVM_PSCI_H__
20
21bool kvm_psci_call(struct kvm_vcpu *vcpu);
22
23#endif /* __ARM64_KVM_PSCI_H__ */
diff --git a/arch/arm64/include/uapi/asm/kvm.h b/arch/arm64/include/uapi/asm/kvm.h
index ebac919dc0ca..fb60f9037057 100644
--- a/arch/arm64/include/uapi/asm/kvm.h
+++ b/arch/arm64/include/uapi/asm/kvm.h
@@ -69,6 +69,8 @@ struct kvm_regs {
69#define KVM_VGIC_V2_DIST_SIZE 0x1000 69#define KVM_VGIC_V2_DIST_SIZE 0x1000
70#define KVM_VGIC_V2_CPU_SIZE 0x2000 70#define KVM_VGIC_V2_CPU_SIZE 0x2000
71 71
72#define KVM_ARM_VCPU_POWER_OFF 0 /* CPU is started in OFF state */
73
72struct kvm_vcpu_init { 74struct kvm_vcpu_init {
73 __u32 target; 75 __u32 target;
74 __u32 features[7]; 76 __u32 features[7];
@@ -141,6 +143,20 @@ struct kvm_arch_memory_slot {
141/* Highest supported SPI, from VGIC_NR_IRQS */ 143/* Highest supported SPI, from VGIC_NR_IRQS */
142#define KVM_ARM_IRQ_GIC_MAX 127 144#define KVM_ARM_IRQ_GIC_MAX 127
143 145
146/* PSCI interface */
147#define KVM_PSCI_FN_BASE 0x95c1ba5e
148#define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n))
149
150#define KVM_PSCI_FN_CPU_SUSPEND KVM_PSCI_FN(0)
151#define KVM_PSCI_FN_CPU_OFF KVM_PSCI_FN(1)
152#define KVM_PSCI_FN_CPU_ON KVM_PSCI_FN(2)
153#define KVM_PSCI_FN_MIGRATE KVM_PSCI_FN(3)
154
155#define KVM_PSCI_RET_SUCCESS 0
156#define KVM_PSCI_RET_NI ((unsigned long)-1)
157#define KVM_PSCI_RET_INVAL ((unsigned long)-2)
158#define KVM_PSCI_RET_DENIED ((unsigned long)-3)
159
144#endif 160#endif
145 161
146#endif /* __ARM_KVM_H__ */ 162#endif /* __ARM_KVM_H__ */