root / linux-headers / asm-powerpc / kvm.h @ d4834ff9
History | View | Annotate | Download (11.4 kB)
1 | 51b24e34 | Jan Kiszka | /*
|
---|---|---|---|
2 | 51b24e34 | Jan Kiszka | * This program is free software; you can redistribute it and/or modify
|
3 | 51b24e34 | Jan Kiszka | * it under the terms of the GNU General Public License, version 2, as
|
4 | 51b24e34 | Jan Kiszka | * published by the Free Software Foundation.
|
5 | 51b24e34 | Jan Kiszka | *
|
6 | 51b24e34 | Jan Kiszka | * This program is distributed in the hope that it will be useful,
|
7 | 51b24e34 | Jan Kiszka | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
8 | 51b24e34 | Jan Kiszka | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
9 | 51b24e34 | Jan Kiszka | * GNU General Public License for more details.
|
10 | 51b24e34 | Jan Kiszka | *
|
11 | 51b24e34 | Jan Kiszka | * You should have received a copy of the GNU General Public License
|
12 | 51b24e34 | Jan Kiszka | * along with this program; if not, write to the Free Software
|
13 | 51b24e34 | Jan Kiszka | * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
14 | 51b24e34 | Jan Kiszka | *
|
15 | 51b24e34 | Jan Kiszka | * Copyright IBM Corp. 2007
|
16 | 51b24e34 | Jan Kiszka | *
|
17 | 51b24e34 | Jan Kiszka | * Authors: Hollis Blanchard <hollisb@us.ibm.com>
|
18 | 51b24e34 | Jan Kiszka | */
|
19 | 51b24e34 | Jan Kiszka | |
20 | 51b24e34 | Jan Kiszka | #ifndef __LINUX_KVM_POWERPC_H
|
21 | 51b24e34 | Jan Kiszka | #define __LINUX_KVM_POWERPC_H
|
22 | 51b24e34 | Jan Kiszka | |
23 | 51b24e34 | Jan Kiszka | #include <linux/types.h> |
24 | 51b24e34 | Jan Kiszka | |
25 | 7c6da3de | Alexander Graf | /* Select powerpc specific features in <linux/kvm.h> */
|
26 | 7c6da3de | Alexander Graf | #define __KVM_HAVE_SPAPR_TCE
|
27 | 7c6da3de | Alexander Graf | #define __KVM_HAVE_PPC_SMT
|
28 | 7c6da3de | Alexander Graf | |
29 | 51b24e34 | Jan Kiszka | struct kvm_regs {
|
30 | 51b24e34 | Jan Kiszka | __u64 pc; |
31 | 51b24e34 | Jan Kiszka | __u64 cr; |
32 | 51b24e34 | Jan Kiszka | __u64 ctr; |
33 | 51b24e34 | Jan Kiszka | __u64 lr; |
34 | 51b24e34 | Jan Kiszka | __u64 xer; |
35 | 51b24e34 | Jan Kiszka | __u64 msr; |
36 | 51b24e34 | Jan Kiszka | __u64 srr0; |
37 | 51b24e34 | Jan Kiszka | __u64 srr1; |
38 | 51b24e34 | Jan Kiszka | __u64 pid; |
39 | 51b24e34 | Jan Kiszka | |
40 | 51b24e34 | Jan Kiszka | __u64 sprg0; |
41 | 51b24e34 | Jan Kiszka | __u64 sprg1; |
42 | 51b24e34 | Jan Kiszka | __u64 sprg2; |
43 | 51b24e34 | Jan Kiszka | __u64 sprg3; |
44 | 51b24e34 | Jan Kiszka | __u64 sprg4; |
45 | 51b24e34 | Jan Kiszka | __u64 sprg5; |
46 | 51b24e34 | Jan Kiszka | __u64 sprg6; |
47 | 51b24e34 | Jan Kiszka | __u64 sprg7; |
48 | 51b24e34 | Jan Kiszka | |
49 | 51b24e34 | Jan Kiszka | __u64 gpr[32];
|
50 | 51b24e34 | Jan Kiszka | }; |
51 | 51b24e34 | Jan Kiszka | |
52 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_IMPL_NONE 0 |
53 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_IMPL_FSL 1 |
54 | 51b24e34 | Jan Kiszka | |
55 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_FSL_PIDn (1 << 0) /* PID1/PID2 */ |
56 | 51b24e34 | Jan Kiszka | |
57 | 51b24e34 | Jan Kiszka | /*
|
58 | 51b24e34 | Jan Kiszka | * Feature bits indicate which sections of the sregs struct are valid,
|
59 | 51b24e34 | Jan Kiszka | * both in KVM_GET_SREGS and KVM_SET_SREGS. On KVM_SET_SREGS, registers
|
60 | 51b24e34 | Jan Kiszka | * corresponding to unset feature bits will not be modified. This allows
|
61 | 51b24e34 | Jan Kiszka | * restoring a checkpoint made without that feature, while keeping the
|
62 | 51b24e34 | Jan Kiszka | * default values of the new registers.
|
63 | 51b24e34 | Jan Kiszka | *
|
64 | 51b24e34 | Jan Kiszka | * KVM_SREGS_E_BASE contains:
|
65 | 51b24e34 | Jan Kiszka | * CSRR0/1 (refers to SRR2/3 on 40x)
|
66 | 51b24e34 | Jan Kiszka | * ESR
|
67 | 51b24e34 | Jan Kiszka | * DEAR
|
68 | 51b24e34 | Jan Kiszka | * MCSR
|
69 | 51b24e34 | Jan Kiszka | * TSR
|
70 | 51b24e34 | Jan Kiszka | * TCR
|
71 | 51b24e34 | Jan Kiszka | * DEC
|
72 | 51b24e34 | Jan Kiszka | * TB
|
73 | 51b24e34 | Jan Kiszka | * VRSAVE (USPRG0)
|
74 | 51b24e34 | Jan Kiszka | */
|
75 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_BASE (1 << 0) |
76 | 51b24e34 | Jan Kiszka | |
77 | 51b24e34 | Jan Kiszka | /*
|
78 | 51b24e34 | Jan Kiszka | * KVM_SREGS_E_ARCH206 contains:
|
79 | 51b24e34 | Jan Kiszka | *
|
80 | 51b24e34 | Jan Kiszka | * PIR
|
81 | 51b24e34 | Jan Kiszka | * MCSRR0/1
|
82 | 51b24e34 | Jan Kiszka | * DECAR
|
83 | 51b24e34 | Jan Kiszka | * IVPR
|
84 | 51b24e34 | Jan Kiszka | */
|
85 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_ARCH206 (1 << 1) |
86 | 51b24e34 | Jan Kiszka | |
87 | 51b24e34 | Jan Kiszka | /*
|
88 | 51b24e34 | Jan Kiszka | * Contains EPCR, plus the upper half of 64-bit registers
|
89 | 51b24e34 | Jan Kiszka | * that are 32-bit on 32-bit implementations.
|
90 | 51b24e34 | Jan Kiszka | */
|
91 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_64 (1 << 2) |
92 | 51b24e34 | Jan Kiszka | |
93 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_SPRG8 (1 << 3) |
94 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_MCIVPR (1 << 4) |
95 | 51b24e34 | Jan Kiszka | |
96 | 51b24e34 | Jan Kiszka | /*
|
97 | 51b24e34 | Jan Kiszka | * IVORs are used -- contains IVOR0-15, plus additional IVORs
|
98 | 51b24e34 | Jan Kiszka | * in combination with an appropriate feature bit.
|
99 | 51b24e34 | Jan Kiszka | */
|
100 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_IVOR (1 << 5) |
101 | 51b24e34 | Jan Kiszka | |
102 | 51b24e34 | Jan Kiszka | /*
|
103 | 51b24e34 | Jan Kiszka | * Contains MAS0-4, MAS6-7, TLBnCFG, MMUCFG.
|
104 | 51b24e34 | Jan Kiszka | * Also TLBnPS if MMUCFG[MAVN] = 1.
|
105 | 51b24e34 | Jan Kiszka | */
|
106 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_ARCH206_MMU (1 << 6) |
107 | 51b24e34 | Jan Kiszka | |
108 | 51b24e34 | Jan Kiszka | /* DBSR, DBCR, IAC, DAC, DVC */
|
109 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_DEBUG (1 << 7) |
110 | 51b24e34 | Jan Kiszka | |
111 | 51b24e34 | Jan Kiszka | /* Enhanced debug -- DSRR0/1, SPRG9 */
|
112 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_ED (1 << 8) |
113 | 51b24e34 | Jan Kiszka | |
114 | 51b24e34 | Jan Kiszka | /* Embedded Floating Point (SPE) -- IVOR32-34 if KVM_SREGS_E_IVOR */
|
115 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_SPE (1 << 9) |
116 | 51b24e34 | Jan Kiszka | |
117 | 51b24e34 | Jan Kiszka | /* External Proxy (EXP) -- EPR */
|
118 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_EXP (1 << 10) |
119 | 51b24e34 | Jan Kiszka | |
120 | 51b24e34 | Jan Kiszka | /* External PID (E.PD) -- EPSC/EPLC */
|
121 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_PD (1 << 11) |
122 | 51b24e34 | Jan Kiszka | |
123 | 51b24e34 | Jan Kiszka | /* Processor Control (E.PC) -- IVOR36-37 if KVM_SREGS_E_IVOR */
|
124 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_PC (1 << 12) |
125 | 51b24e34 | Jan Kiszka | |
126 | 51b24e34 | Jan Kiszka | /* Page table (E.PT) -- EPTCFG */
|
127 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_PT (1 << 13) |
128 | 51b24e34 | Jan Kiszka | |
129 | 51b24e34 | Jan Kiszka | /* Embedded Performance Monitor (E.PM) -- IVOR35 if KVM_SREGS_E_IVOR */
|
130 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_PM (1 << 14) |
131 | 51b24e34 | Jan Kiszka | |
132 | 51b24e34 | Jan Kiszka | /*
|
133 | 51b24e34 | Jan Kiszka | * Special updates:
|
134 | 51b24e34 | Jan Kiszka | *
|
135 | 51b24e34 | Jan Kiszka | * Some registers may change even while a vcpu is not running.
|
136 | 51b24e34 | Jan Kiszka | * To avoid losing these changes, by default these registers are
|
137 | 51b24e34 | Jan Kiszka | * not updated by KVM_SET_SREGS. To force an update, set the bit
|
138 | 51b24e34 | Jan Kiszka | * in u.e.update_special corresponding to the register to be updated.
|
139 | 51b24e34 | Jan Kiszka | *
|
140 | 51b24e34 | Jan Kiszka | * The update_special field is zero on return from KVM_GET_SREGS.
|
141 | 51b24e34 | Jan Kiszka | *
|
142 | 51b24e34 | Jan Kiszka | * When restoring a checkpoint, the caller can set update_special
|
143 | 51b24e34 | Jan Kiszka | * to 0xffffffff to ensure that everything is restored, even new features
|
144 | 51b24e34 | Jan Kiszka | * that the caller doesn't know about.
|
145 | 51b24e34 | Jan Kiszka | */
|
146 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_UPDATE_MCSR (1 << 0) |
147 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_UPDATE_TSR (1 << 1) |
148 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_UPDATE_DEC (1 << 2) |
149 | 51b24e34 | Jan Kiszka | #define KVM_SREGS_E_UPDATE_DBSR (1 << 3) |
150 | 51b24e34 | Jan Kiszka | |
151 | 51b24e34 | Jan Kiszka | /*
|
152 | 51b24e34 | Jan Kiszka | * In KVM_SET_SREGS, reserved/pad fields must be left untouched from a
|
153 | 51b24e34 | Jan Kiszka | * previous KVM_GET_REGS.
|
154 | 51b24e34 | Jan Kiszka | *
|
155 | 51b24e34 | Jan Kiszka | * Unless otherwise indicated, setting any register with KVM_SET_SREGS
|
156 | 51b24e34 | Jan Kiszka | * directly sets its value. It does not trigger any special semantics such
|
157 | 51b24e34 | Jan Kiszka | * as write-one-to-clear. Calling KVM_SET_SREGS on an unmodified struct
|
158 | 51b24e34 | Jan Kiszka | * just received from KVM_GET_SREGS is always a no-op.
|
159 | 51b24e34 | Jan Kiszka | */
|
160 | 51b24e34 | Jan Kiszka | struct kvm_sregs {
|
161 | 51b24e34 | Jan Kiszka | __u32 pvr; |
162 | 51b24e34 | Jan Kiszka | union {
|
163 | 51b24e34 | Jan Kiszka | struct {
|
164 | 51b24e34 | Jan Kiszka | __u64 sdr1; |
165 | 51b24e34 | Jan Kiszka | struct {
|
166 | 51b24e34 | Jan Kiszka | struct {
|
167 | 51b24e34 | Jan Kiszka | __u64 slbe; |
168 | 51b24e34 | Jan Kiszka | __u64 slbv; |
169 | 51b24e34 | Jan Kiszka | } slb[64];
|
170 | 51b24e34 | Jan Kiszka | } ppc64; |
171 | 51b24e34 | Jan Kiszka | struct {
|
172 | 51b24e34 | Jan Kiszka | __u32 sr[16];
|
173 | 51b24e34 | Jan Kiszka | __u64 ibat[8];
|
174 | 51b24e34 | Jan Kiszka | __u64 dbat[8];
|
175 | 51b24e34 | Jan Kiszka | } ppc32; |
176 | 51b24e34 | Jan Kiszka | } s; |
177 | 51b24e34 | Jan Kiszka | struct {
|
178 | 51b24e34 | Jan Kiszka | union {
|
179 | 51b24e34 | Jan Kiszka | struct { /* KVM_SREGS_E_IMPL_FSL */ |
180 | 51b24e34 | Jan Kiszka | __u32 features; /* KVM_SREGS_E_FSL_ */
|
181 | 51b24e34 | Jan Kiszka | __u32 svr; |
182 | 51b24e34 | Jan Kiszka | __u64 mcar; |
183 | 51b24e34 | Jan Kiszka | __u32 hid0; |
184 | 51b24e34 | Jan Kiszka | |
185 | 51b24e34 | Jan Kiszka | /* KVM_SREGS_E_FSL_PIDn */
|
186 | 51b24e34 | Jan Kiszka | __u32 pid1, pid2; |
187 | 51b24e34 | Jan Kiszka | } fsl; |
188 | 51b24e34 | Jan Kiszka | __u8 pad[256];
|
189 | 51b24e34 | Jan Kiszka | } impl; |
190 | 51b24e34 | Jan Kiszka | |
191 | 51b24e34 | Jan Kiszka | __u32 features; /* KVM_SREGS_E_ */
|
192 | 51b24e34 | Jan Kiszka | __u32 impl_id; /* KVM_SREGS_E_IMPL_ */
|
193 | 51b24e34 | Jan Kiszka | __u32 update_special; /* KVM_SREGS_E_UPDATE_ */
|
194 | 51b24e34 | Jan Kiszka | __u32 pir; /* read-only */
|
195 | 51b24e34 | Jan Kiszka | __u64 sprg8; |
196 | 51b24e34 | Jan Kiszka | __u64 sprg9; /* E.ED */
|
197 | 51b24e34 | Jan Kiszka | __u64 csrr0; |
198 | 51b24e34 | Jan Kiszka | __u64 dsrr0; /* E.ED */
|
199 | 51b24e34 | Jan Kiszka | __u64 mcsrr0; |
200 | 51b24e34 | Jan Kiszka | __u32 csrr1; |
201 | 51b24e34 | Jan Kiszka | __u32 dsrr1; /* E.ED */
|
202 | 51b24e34 | Jan Kiszka | __u32 mcsrr1; |
203 | 51b24e34 | Jan Kiszka | __u32 esr; |
204 | 51b24e34 | Jan Kiszka | __u64 dear; |
205 | 51b24e34 | Jan Kiszka | __u64 ivpr; |
206 | 51b24e34 | Jan Kiszka | __u64 mcivpr; |
207 | 51b24e34 | Jan Kiszka | __u64 mcsr; /* KVM_SREGS_E_UPDATE_MCSR */
|
208 | 51b24e34 | Jan Kiszka | |
209 | 51b24e34 | Jan Kiszka | __u32 tsr; /* KVM_SREGS_E_UPDATE_TSR */
|
210 | 51b24e34 | Jan Kiszka | __u32 tcr; |
211 | 51b24e34 | Jan Kiszka | __u32 decar; |
212 | 51b24e34 | Jan Kiszka | __u32 dec; /* KVM_SREGS_E_UPDATE_DEC */
|
213 | 51b24e34 | Jan Kiszka | |
214 | 51b24e34 | Jan Kiszka | /*
|
215 | 51b24e34 | Jan Kiszka | * Userspace can read TB directly, but the
|
216 | 51b24e34 | Jan Kiszka | * value reported here is consistent with "dec".
|
217 | 51b24e34 | Jan Kiszka | *
|
218 | 51b24e34 | Jan Kiszka | * Read-only.
|
219 | 51b24e34 | Jan Kiszka | */
|
220 | 51b24e34 | Jan Kiszka | __u64 tb; |
221 | 51b24e34 | Jan Kiszka | |
222 | 51b24e34 | Jan Kiszka | __u32 dbsr; /* KVM_SREGS_E_UPDATE_DBSR */
|
223 | 51b24e34 | Jan Kiszka | __u32 dbcr[3];
|
224 | d4834ff9 | Alexander Graf | /*
|
225 | d4834ff9 | Alexander Graf | * iac/dac registers are 64bit wide, while this API
|
226 | d4834ff9 | Alexander Graf | * interface provides only lower 32 bits on 64 bit
|
227 | d4834ff9 | Alexander Graf | * processors. ONE_REG interface is added for 64bit
|
228 | d4834ff9 | Alexander Graf | * iac/dac registers.
|
229 | d4834ff9 | Alexander Graf | */
|
230 | 51b24e34 | Jan Kiszka | __u32 iac[4];
|
231 | 51b24e34 | Jan Kiszka | __u32 dac[2];
|
232 | 51b24e34 | Jan Kiszka | __u32 dvc[2];
|
233 | 51b24e34 | Jan Kiszka | __u8 num_iac; /* read-only */
|
234 | 51b24e34 | Jan Kiszka | __u8 num_dac; /* read-only */
|
235 | 51b24e34 | Jan Kiszka | __u8 num_dvc; /* read-only */
|
236 | 51b24e34 | Jan Kiszka | __u8 pad; |
237 | 51b24e34 | Jan Kiszka | |
238 | 51b24e34 | Jan Kiszka | __u32 epr; /* EXP */
|
239 | 51b24e34 | Jan Kiszka | __u32 vrsave; /* a.k.a. USPRG0 */
|
240 | 51b24e34 | Jan Kiszka | __u32 epcr; /* KVM_SREGS_E_64 */
|
241 | 51b24e34 | Jan Kiszka | |
242 | 51b24e34 | Jan Kiszka | __u32 mas0; |
243 | 51b24e34 | Jan Kiszka | __u32 mas1; |
244 | 51b24e34 | Jan Kiszka | __u64 mas2; |
245 | 51b24e34 | Jan Kiszka | __u64 mas7_3; |
246 | 51b24e34 | Jan Kiszka | __u32 mas4; |
247 | 51b24e34 | Jan Kiszka | __u32 mas6; |
248 | 51b24e34 | Jan Kiszka | |
249 | 51b24e34 | Jan Kiszka | __u32 ivor_low[16]; /* IVOR0-15 */ |
250 | 51b24e34 | Jan Kiszka | __u32 ivor_high[18]; /* IVOR32+, plus room to expand */ |
251 | 51b24e34 | Jan Kiszka | |
252 | 51b24e34 | Jan Kiszka | __u32 mmucfg; /* read-only */
|
253 | 51b24e34 | Jan Kiszka | __u32 eptcfg; /* E.PT, read-only */
|
254 | 51b24e34 | Jan Kiszka | __u32 tlbcfg[4];/* read-only */ |
255 | 51b24e34 | Jan Kiszka | __u32 tlbps[4]; /* read-only */ |
256 | 51b24e34 | Jan Kiszka | |
257 | 51b24e34 | Jan Kiszka | __u32 eplc, epsc; /* E.PD */
|
258 | 51b24e34 | Jan Kiszka | } e; |
259 | 51b24e34 | Jan Kiszka | __u8 pad[1020];
|
260 | 51b24e34 | Jan Kiszka | } u; |
261 | 51b24e34 | Jan Kiszka | }; |
262 | 51b24e34 | Jan Kiszka | |
263 | 51b24e34 | Jan Kiszka | struct kvm_fpu {
|
264 | 51b24e34 | Jan Kiszka | __u64 fpr[32];
|
265 | 51b24e34 | Jan Kiszka | }; |
266 | 51b24e34 | Jan Kiszka | |
267 | 51b24e34 | Jan Kiszka | struct kvm_debug_exit_arch {
|
268 | 51b24e34 | Jan Kiszka | }; |
269 | 51b24e34 | Jan Kiszka | |
270 | 51b24e34 | Jan Kiszka | /* for KVM_SET_GUEST_DEBUG */
|
271 | 51b24e34 | Jan Kiszka | struct kvm_guest_debug_arch {
|
272 | 51b24e34 | Jan Kiszka | }; |
273 | 51b24e34 | Jan Kiszka | |
274 | 1529ae1b | Alexander Graf | /* definition of registers in kvm_run */
|
275 | 1529ae1b | Alexander Graf | struct kvm_sync_regs {
|
276 | 1529ae1b | Alexander Graf | }; |
277 | 51b24e34 | Jan Kiszka | |
278 | 51b24e34 | Jan Kiszka | #define KVM_INTERRUPT_SET -1U |
279 | 51b24e34 | Jan Kiszka | #define KVM_INTERRUPT_UNSET -2U |
280 | 51b24e34 | Jan Kiszka | #define KVM_INTERRUPT_SET_LEVEL -3U |
281 | 51b24e34 | Jan Kiszka | |
282 | a54fc080 | Alexander Graf | #define KVM_CPU_440 1 |
283 | a54fc080 | Alexander Graf | #define KVM_CPU_E500V2 2 |
284 | a54fc080 | Alexander Graf | #define KVM_CPU_3S_32 3 |
285 | a54fc080 | Alexander Graf | #define KVM_CPU_3S_64 4 |
286 | 9ab2195d | Marcelo Tosatti | #define KVM_CPU_E500MC 5 |
287 | a54fc080 | Alexander Graf | |
288 | 7c6da3de | Alexander Graf | /* for KVM_CAP_SPAPR_TCE */
|
289 | 7c6da3de | Alexander Graf | struct kvm_create_spapr_tce {
|
290 | 7c6da3de | Alexander Graf | __u64 liobn; |
291 | 7c6da3de | Alexander Graf | __u32 window_size; |
292 | 7c6da3de | Alexander Graf | }; |
293 | 7c6da3de | Alexander Graf | |
294 | 7c6da3de | Alexander Graf | /* for KVM_ALLOCATE_RMA */
|
295 | 7c6da3de | Alexander Graf | struct kvm_allocate_rma {
|
296 | 7c6da3de | Alexander Graf | __u64 rma_size; |
297 | 7c6da3de | Alexander Graf | }; |
298 | 7c6da3de | Alexander Graf | |
299 | a54fc080 | Alexander Graf | struct kvm_book3e_206_tlb_entry {
|
300 | a54fc080 | Alexander Graf | __u32 mas8; |
301 | a54fc080 | Alexander Graf | __u32 mas1; |
302 | a54fc080 | Alexander Graf | __u64 mas2; |
303 | a54fc080 | Alexander Graf | __u64 mas7_3; |
304 | a54fc080 | Alexander Graf | }; |
305 | a54fc080 | Alexander Graf | |
306 | a54fc080 | Alexander Graf | struct kvm_book3e_206_tlb_params {
|
307 | a54fc080 | Alexander Graf | /*
|
308 | a54fc080 | Alexander Graf | * For mmu types KVM_MMU_FSL_BOOKE_NOHV and KVM_MMU_FSL_BOOKE_HV:
|
309 | a54fc080 | Alexander Graf | *
|
310 | a54fc080 | Alexander Graf | * - The number of ways of TLB0 must be a power of two between 2 and
|
311 | a54fc080 | Alexander Graf | * 16.
|
312 | a54fc080 | Alexander Graf | * - TLB1 must be fully associative.
|
313 | a54fc080 | Alexander Graf | * - The size of TLB0 must be a multiple of the number of ways, and
|
314 | a54fc080 | Alexander Graf | * the number of sets must be a power of two.
|
315 | a54fc080 | Alexander Graf | * - The size of TLB1 may not exceed 64 entries.
|
316 | a54fc080 | Alexander Graf | * - TLB0 supports 4 KiB pages.
|
317 | a54fc080 | Alexander Graf | * - The page sizes supported by TLB1 are as indicated by
|
318 | a54fc080 | Alexander Graf | * TLB1CFG (if MMUCFG[MAVN] = 0) or TLB1PS (if MMUCFG[MAVN] = 1)
|
319 | a54fc080 | Alexander Graf | * as returned by KVM_GET_SREGS.
|
320 | a54fc080 | Alexander Graf | * - TLB2 and TLB3 are reserved, and their entries in tlb_sizes[]
|
321 | a54fc080 | Alexander Graf | * and tlb_ways[] must be zero.
|
322 | a54fc080 | Alexander Graf | *
|
323 | a54fc080 | Alexander Graf | * tlb_ways[n] = tlb_sizes[n] means the array is fully associative.
|
324 | a54fc080 | Alexander Graf | *
|
325 | a54fc080 | Alexander Graf | * KVM will adjust TLBnCFG based on the sizes configured here,
|
326 | a54fc080 | Alexander Graf | * though arrays greater than 2048 entries will have TLBnCFG[NENTRY]
|
327 | a54fc080 | Alexander Graf | * set to zero.
|
328 | a54fc080 | Alexander Graf | */
|
329 | a54fc080 | Alexander Graf | __u32 tlb_sizes[4];
|
330 | a54fc080 | Alexander Graf | __u32 tlb_ways[4];
|
331 | a54fc080 | Alexander Graf | __u32 reserved[8];
|
332 | a54fc080 | Alexander Graf | }; |
333 | a54fc080 | Alexander Graf | |
334 | d4834ff9 | Alexander Graf | /* For KVM_PPC_GET_HTAB_FD */
|
335 | d4834ff9 | Alexander Graf | struct kvm_get_htab_fd {
|
336 | d4834ff9 | Alexander Graf | __u64 flags; |
337 | d4834ff9 | Alexander Graf | __u64 start_index; |
338 | d4834ff9 | Alexander Graf | __u64 reserved[2];
|
339 | d4834ff9 | Alexander Graf | }; |
340 | d4834ff9 | Alexander Graf | |
341 | d4834ff9 | Alexander Graf | /* Values for kvm_get_htab_fd.flags */
|
342 | d4834ff9 | Alexander Graf | #define KVM_GET_HTAB_BOLTED_ONLY ((__u64)0x1) |
343 | d4834ff9 | Alexander Graf | #define KVM_GET_HTAB_WRITE ((__u64)0x2) |
344 | d4834ff9 | Alexander Graf | |
345 | d4834ff9 | Alexander Graf | /*
|
346 | d4834ff9 | Alexander Graf | * Data read on the file descriptor is formatted as a series of
|
347 | d4834ff9 | Alexander Graf | * records, each consisting of a header followed by a series of
|
348 | d4834ff9 | Alexander Graf | * `n_valid' HPTEs (16 bytes each), which are all valid. Following
|
349 | d4834ff9 | Alexander Graf | * those valid HPTEs there are `n_invalid' invalid HPTEs, which
|
350 | d4834ff9 | Alexander Graf | * are not represented explicitly in the stream. The same format
|
351 | d4834ff9 | Alexander Graf | * is used for writing.
|
352 | d4834ff9 | Alexander Graf | */
|
353 | d4834ff9 | Alexander Graf | struct kvm_get_htab_header {
|
354 | d4834ff9 | Alexander Graf | __u32 index; |
355 | d4834ff9 | Alexander Graf | __u16 n_valid; |
356 | d4834ff9 | Alexander Graf | __u16 n_invalid; |
357 | d4834ff9 | Alexander Graf | }; |
358 | d4834ff9 | Alexander Graf | |
359 | a31be480 | Alexander Graf | #define KVM_REG_PPC_HIOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x1) |
360 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_IAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x2) |
361 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_IAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3) |
362 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_IAC3 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x4) |
363 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_IAC4 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x5) |
364 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DAC1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x6) |
365 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DAC2 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x7) |
366 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DABR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x8) |
367 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x9) |
368 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xa) |
369 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_SPURR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xb) |
370 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DAR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xc) |
371 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_DSISR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0xd) |
372 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_AMR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xe) |
373 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_UAMOR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0xf) |
374 | d4834ff9 | Alexander Graf | |
375 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_MMCR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x10) |
376 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_MMCR1 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x11) |
377 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_MMCRA (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x12) |
378 | d4834ff9 | Alexander Graf | |
379 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC1 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x18) |
380 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC2 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x19) |
381 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC3 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1a) |
382 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC4 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1b) |
383 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC5 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1c) |
384 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC6 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1d) |
385 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC7 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1e) |
386 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_PMC8 (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x1f) |
387 | d4834ff9 | Alexander Graf | |
388 | d4834ff9 | Alexander Graf | /* 32 floating-point registers */
|
389 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_FPR0 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x20) |
390 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_FPR(n) (KVM_REG_PPC_FPR0 + (n))
|
391 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_FPR31 (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x3f) |
392 | d4834ff9 | Alexander Graf | |
393 | d4834ff9 | Alexander Graf | /* 32 VMX/Altivec vector registers */
|
394 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x40) |
395 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VR(n) (KVM_REG_PPC_VR0 + (n))
|
396 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x5f) |
397 | d4834ff9 | Alexander Graf | |
398 | d4834ff9 | Alexander Graf | /* 32 double-width FP registers for VSX */
|
399 | d4834ff9 | Alexander Graf | /* High-order halves overlap with FP regs */
|
400 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VSR0 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x60) |
401 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VSR(n) (KVM_REG_PPC_VSR0 + (n))
|
402 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VSR31 (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x7f) |
403 | d4834ff9 | Alexander Graf | |
404 | d4834ff9 | Alexander Graf | /* FP and vector status/control registers */
|
405 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_FPSCR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x80) |
406 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VSCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x81) |
407 | d4834ff9 | Alexander Graf | |
408 | d4834ff9 | Alexander Graf | /* Virtual processor areas */
|
409 | d4834ff9 | Alexander Graf | /* For SLB & DTL, address in high (first) half, length in low half */
|
410 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VPA_ADDR (KVM_REG_PPC | KVM_REG_SIZE_U64 | 0x82) |
411 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VPA_SLB (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x83) |
412 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_VPA_DTL (KVM_REG_PPC | KVM_REG_SIZE_U128 | 0x84) |
413 | d4834ff9 | Alexander Graf | |
414 | d4834ff9 | Alexander Graf | #define KVM_REG_PPC_EPCR (KVM_REG_PPC | KVM_REG_SIZE_U32 | 0x85) |
415 | 9d4e4f8c | Alexander Graf | |
416 | 51b24e34 | Jan Kiszka | #endif /* __LINUX_KVM_POWERPC_H */ |