powerpc/mm: Fix build error with FLATMEM book3s64 config
[linux-2.6-block.git] / arch / powerpc / include / asm / kvm_book3s_asm.h
CommitLineData
3cea8c43
AG
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License, version 2, as
4 * published by the Free Software Foundation.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * You should have received a copy of the GNU General Public License
12 * along with this program; if not, write to the Free Software
13 * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
14 *
15 * Copyright SUSE Linux Products GmbH 2009
16 *
17 * Authors: Alexander Graf <agraf@suse.de>
18 */
19
20#ifndef __ASM_KVM_BOOK3S_ASM_H__
21#define __ASM_KVM_BOOK3S_ASM_H__
22
54695c30
BH
23/* XICS ICP register offsets */
24#define XICS_XIRR 4
25#define XICS_MFRR 0xc
26#define XICS_IPI 2 /* interrupt source # for IPIs */
27
8e3f5fc1
PM
28/* LPIDs we support with this build -- runtime limit may be lower */
29#define KVMPPC_NR_LPIDS (LPID_RSVD + 1)
30
b4deba5c
PM
31/* Maximum number of threads per physical core */
32#define MAX_SMT_THREADS 8
33
34/* Maximum number of subcores per physical core */
35#define MAX_SUBCORES 4
36
7e57cba0
AG
37#ifdef __ASSEMBLY__
38
c14dea04 39#ifdef CONFIG_KVM_BOOK3S_HANDLER
3cea8c43
AG
40
41#include <asm/kvm_asm.h>
42
43.macro DO_KVM intno
44 .if (\intno == BOOK3S_INTERRUPT_SYSTEM_RESET) || \
45 (\intno == BOOK3S_INTERRUPT_MACHINE_CHECK) || \
46 (\intno == BOOK3S_INTERRUPT_DATA_STORAGE) || \
47 (\intno == BOOK3S_INTERRUPT_INST_STORAGE) || \
48 (\intno == BOOK3S_INTERRUPT_DATA_SEGMENT) || \
49 (\intno == BOOK3S_INTERRUPT_INST_SEGMENT) || \
50 (\intno == BOOK3S_INTERRUPT_EXTERNAL) || \
a5d4f3ad 51 (\intno == BOOK3S_INTERRUPT_EXTERNAL_HV) || \
3cea8c43
AG
52 (\intno == BOOK3S_INTERRUPT_ALIGNMENT) || \
53 (\intno == BOOK3S_INTERRUPT_PROGRAM) || \
54 (\intno == BOOK3S_INTERRUPT_FP_UNAVAIL) || \
55 (\intno == BOOK3S_INTERRUPT_DECREMENTER) || \
56 (\intno == BOOK3S_INTERRUPT_SYSCALL) || \
57 (\intno == BOOK3S_INTERRUPT_TRACE) || \
58 (\intno == BOOK3S_INTERRUPT_PERFMON) || \
59 (\intno == BOOK3S_INTERRUPT_ALTIVEC) || \
60 (\intno == BOOK3S_INTERRUPT_VSX)
61
62 b kvmppc_trampoline_\intno
63kvmppc_resume_\intno:
64
65 .endif
66.endm
67
68#else
69
70.macro DO_KVM intno
71.endm
72
c14dea04 73#endif /* CONFIG_KVM_BOOK3S_HANDLER */
3cea8c43 74
7e57cba0
AG
75#else /*__ASSEMBLY__ */
76
b4deba5c
PM
77struct kvmppc_vcore;
78
79/* Struct used for coordinating micro-threading (split-core) mode changes */
80struct kvm_split_mode {
81 unsigned long rpr;
82 unsigned long pmmar;
83 unsigned long ldbar;
84 u8 subcore_size;
85 u8 do_nap;
86 u8 napped[MAX_SMT_THREADS];
898b25b2 87 struct kvmppc_vcore *vc[MAX_SUBCORES];
c0101509
PM
88 /* Bits for changing lpcr on P9 */
89 unsigned long lpcr_req;
90 unsigned long lpidr_req;
91 unsigned long host_lpcr;
92 u32 do_set;
93 u32 do_restore;
94 union {
95 u32 allphases;
96 u8 phase[4];
97 } lpcr_sync;
b4deba5c
PM
98};
99
3c42bf8a
PM
100/*
101 * This struct goes in the PACA on 64-bit processors. It is used
102 * to store host state that needs to be saved when we enter a guest
103 * and restored when we exit, but isn't specific to any particular
104 * guest or vcpu. It also has some scratch fields used by the guest
105 * exit code.
106 */
107struct kvmppc_host_state {
108 ulong host_r1;
109 ulong host_r2;
de56a948 110 ulong host_msr;
3c42bf8a
PM
111 ulong vmhandler;
112 ulong scratch0;
113 ulong scratch1;
36e7bb38 114 ulong scratch2;
3c42bf8a 115 u8 in_guest;
02143947 116 u8 restore_hid5;
19ccb76a 117 u8 napping;
de56a948 118
9975f5e3 119#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
f0888f70
PM
120 u8 hwthread_req;
121 u8 hwthread_state;
54695c30 122 u8 host_ipi;
c0101509
PM
123 u8 ptid; /* thread number within subcore when split */
124 u8 tid; /* thread number within whole core */
4bb3c7a0 125 u8 fake_suspend;
de56a948 126 struct kvm_vcpu *kvm_vcpu;
371fefd6 127 struct kvmppc_vcore *kvm_vcore;
d381d7ca 128 void __iomem *xics_phys;
5af50993
BH
129 void __iomem *xive_tima_phys;
130 void __iomem *xive_tima_virt;
54695c30 131 u32 saved_xirr;
de56a948 132 u64 dabr;
72cde5a8 133 u64 host_mmcr[7]; /* MMCR 0,1,A, SIAR, SDAR, MMCR2, SIER */
9e368f29 134 u32 host_pmc[8];
de56a948
PM
135 u64 host_purr;
136 u64 host_spurr;
137 u64 host_dscr;
138 u64 dec_expires;
b4deba5c 139 struct kvm_split_mode *kvm_split_mode;
de56a948 140#endif
0acb9111
PM
141#ifdef CONFIG_PPC_BOOK3S_64
142 u64 cfar;
4b8473c9 143 u64 ppr;
616dff86 144 u64 host_fscr;
0acb9111 145#endif
3c42bf8a
PM
146};
147
7e57cba0 148struct kvmppc_book3s_shadow_vcpu {
40fdd8c8 149 bool in_use;
7e57cba0
AG
150 ulong gpr[14];
151 u32 cr;
c63517c2 152 ulong xer;
66bb1706
AG
153 ulong ctr;
154 ulong lr;
155 ulong pc;
a2d56020 156
66bb1706
AG
157 ulong shadow_srr1;
158 ulong fault_dar;
a2d56020
PM
159 u32 fault_dsisr;
160 u32 last_inst;
66bb1706 161
66bb1706
AG
162#ifdef CONFIG_PPC_BOOK3S_32
163 u32 sr[16]; /* Guest SRs */
3c42bf8a
PM
164
165 struct kvmppc_host_state hstate;
66bb1706 166#endif
3c42bf8a 167
66bb1706
AG
168#ifdef CONFIG_PPC_BOOK3S_64
169 u8 slb_max; /* highest used guest slb entry */
170 struct {
171 u64 esid;
172 u64 vsid;
173 } slb[64]; /* guest SLB */
616dff86 174 u64 shadow_fscr;
66bb1706 175#endif
7e57cba0
AG
176};
177
178#endif /*__ASSEMBLY__ */
179
f0888f70
PM
180/* Values for kvm_state */
181#define KVM_HWTHREAD_IN_KERNEL 0
bcef83a0 182#define KVM_HWTHREAD_IN_IDLE 1
f0888f70
PM
183#define KVM_HWTHREAD_IN_KVM 2
184
3cea8c43 185#endif /* __ASM_KVM_BOOK3S_ASM_H__ */