aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/include/uapi/asm/kvm.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/include/uapi/asm/kvm.h')
-rw-r--r--arch/ia64/include/uapi/asm/kvm.h269
1 files changed, 269 insertions, 0 deletions
diff --git a/arch/ia64/include/uapi/asm/kvm.h b/arch/ia64/include/uapi/asm/kvm.h
new file mode 100644
index 000000000000..ec6c6b301238
--- /dev/null
+++ b/arch/ia64/include/uapi/asm/kvm.h
@@ -0,0 +1,269 @@
1#ifndef __ASM_IA64_KVM_H
2#define __ASM_IA64_KVM_H
3
4/*
5 * kvm structure definitions for ia64
6 *
7 * Copyright (C) 2007 Xiantao Zhang <xiantao.zhang@intel.com>
8 *
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms and conditions of the GNU General Public License,
11 * version 2, as published by the Free Software Foundation.
12 *
13 * This program is distributed in the hope it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 * more details.
17 *
18 * You should have received a copy of the GNU General Public License along with
19 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
20 * Place - Suite 330, Boston, MA 02111-1307 USA.
21 *
22 */
23
24#include <linux/types.h>
25#include <linux/ioctl.h>
26
27/* Select x86 specific features in <linux/kvm.h> */
28#define __KVM_HAVE_IOAPIC
29#define __KVM_HAVE_IRQ_LINE
30#define __KVM_HAVE_DEVICE_ASSIGNMENT
31
32/* Architectural interrupt line count. */
33#define KVM_NR_INTERRUPTS 256
34
35#define KVM_IOAPIC_NUM_PINS 48
36
37struct kvm_ioapic_state {
38 __u64 base_address;
39 __u32 ioregsel;
40 __u32 id;
41 __u32 irr;
42 __u32 pad;
43 union {
44 __u64 bits;
45 struct {
46 __u8 vector;
47 __u8 delivery_mode:3;
48 __u8 dest_mode:1;
49 __u8 delivery_status:1;
50 __u8 polarity:1;
51 __u8 remote_irr:1;
52 __u8 trig_mode:1;
53 __u8 mask:1;
54 __u8 reserve:7;
55 __u8 reserved[4];
56 __u8 dest_id;
57 } fields;
58 } redirtbl[KVM_IOAPIC_NUM_PINS];
59};
60
61#define KVM_IRQCHIP_PIC_MASTER 0
62#define KVM_IRQCHIP_PIC_SLAVE 1
63#define KVM_IRQCHIP_IOAPIC 2
64#define KVM_NR_IRQCHIPS 3
65
66#define KVM_CONTEXT_SIZE 8*1024
67
68struct kvm_fpreg {
69 union {
70 unsigned long bits[2];
71 long double __dummy; /* force 16-byte alignment */
72 } u;
73};
74
75union context {
76 /* 8K size */
77 char dummy[KVM_CONTEXT_SIZE];
78 struct {
79 unsigned long psr;
80 unsigned long pr;
81 unsigned long caller_unat;
82 unsigned long pad;
83 unsigned long gr[32];
84 unsigned long ar[128];
85 unsigned long br[8];
86 unsigned long cr[128];
87 unsigned long rr[8];
88 unsigned long ibr[8];
89 unsigned long dbr[8];
90 unsigned long pkr[8];
91 struct kvm_fpreg fr[128];
92 };
93};
94
95struct thash_data {
96 union {
97 struct {
98 unsigned long p : 1; /* 0 */
99 unsigned long rv1 : 1; /* 1 */
100 unsigned long ma : 3; /* 2-4 */
101 unsigned long a : 1; /* 5 */
102 unsigned long d : 1; /* 6 */
103 unsigned long pl : 2; /* 7-8 */
104 unsigned long ar : 3; /* 9-11 */
105 unsigned long ppn : 38; /* 12-49 */
106 unsigned long rv2 : 2; /* 50-51 */
107 unsigned long ed : 1; /* 52 */
108 unsigned long ig1 : 11; /* 53-63 */
109 };
110 struct {
111 unsigned long __rv1 : 53; /* 0-52 */
112 unsigned long contiguous : 1; /*53 */
113 unsigned long tc : 1; /* 54 TR or TC */
114 unsigned long cl : 1;
115 /* 55 I side or D side cache line */
116 unsigned long len : 4; /* 56-59 */
117 unsigned long io : 1; /* 60 entry is for io or not */
118 unsigned long nomap : 1;
119 /* 61 entry cann't be inserted into machine TLB.*/
120 unsigned long checked : 1;
121 /* 62 for VTLB/VHPT sanity check */
122 unsigned long invalid : 1;
123 /* 63 invalid entry */
124 };
125 unsigned long page_flags;
126 }; /* same for VHPT and TLB */
127
128 union {
129 struct {
130 unsigned long rv3 : 2;
131 unsigned long ps : 6;
132 unsigned long key : 24;
133 unsigned long rv4 : 32;
134 };
135 unsigned long itir;
136 };
137 union {
138 struct {
139 unsigned long ig2 : 12;
140 unsigned long vpn : 49;
141 unsigned long vrn : 3;
142 };
143 unsigned long ifa;
144 unsigned long vadr;
145 struct {
146 unsigned long tag : 63;
147 unsigned long ti : 1;
148 };
149 unsigned long etag;
150 };
151 union {
152 struct thash_data *next;
153 unsigned long rid;
154 unsigned long gpaddr;
155 };
156};
157
158#define NITRS 8
159#define NDTRS 8
160
161struct saved_vpd {
162 unsigned long vhpi;
163 unsigned long vgr[16];
164 unsigned long vbgr[16];
165 unsigned long vnat;
166 unsigned long vbnat;
167 unsigned long vcpuid[5];
168 unsigned long vpsr;
169 unsigned long vpr;
170 union {
171 unsigned long vcr[128];
172 struct {
173 unsigned long dcr;
174 unsigned long itm;
175 unsigned long iva;
176 unsigned long rsv1[5];
177 unsigned long pta;
178 unsigned long rsv2[7];
179 unsigned long ipsr;
180 unsigned long isr;
181 unsigned long rsv3;
182 unsigned long iip;
183 unsigned long ifa;
184 unsigned long itir;
185 unsigned long iipa;
186 unsigned long ifs;
187 unsigned long iim;
188 unsigned long iha;
189 unsigned long rsv4[38];
190 unsigned long lid;
191 unsigned long ivr;
192 unsigned long tpr;
193 unsigned long eoi;
194 unsigned long irr[4];
195 unsigned long itv;
196 unsigned long pmv;
197 unsigned long cmcv;
198 unsigned long rsv5[5];
199 unsigned long lrr0;
200 unsigned long lrr1;
201 unsigned long rsv6[46];
202 };
203 };
204};
205
206struct kvm_regs {
207 struct saved_vpd vpd;
208 /*Arch-regs*/
209 int mp_state;
210 unsigned long vmm_rr;
211 /* TR and TC. */
212 struct thash_data itrs[NITRS];
213 struct thash_data dtrs[NDTRS];
214 /* Bit is set if there is a tr/tc for the region. */
215 unsigned char itr_regions;
216 unsigned char dtr_regions;
217 unsigned char tc_regions;
218
219 char irq_check;
220 unsigned long saved_itc;
221 unsigned long itc_check;
222 unsigned long timer_check;
223 unsigned long timer_pending;
224 unsigned long last_itc;
225
226 unsigned long vrr[8];
227 unsigned long ibr[8];
228 unsigned long dbr[8];
229 unsigned long insvc[4]; /* Interrupt in service. */
230 unsigned long xtp;
231
232 unsigned long metaphysical_rr0; /* from kvm_arch (so is pinned) */
233 unsigned long metaphysical_rr4; /* from kvm_arch (so is pinned) */
234 unsigned long metaphysical_saved_rr0; /* from kvm_arch */
235 unsigned long metaphysical_saved_rr4; /* from kvm_arch */
236 unsigned long fp_psr; /*used for lazy float register */
237 unsigned long saved_gp;
238 /*for phycial emulation */
239
240 union context saved_guest;
241
242 unsigned long reserved[64]; /* for future use */
243};
244
245struct kvm_sregs {
246};
247
248struct kvm_fpu {
249};
250
251#define KVM_IA64_VCPU_STACK_SHIFT 16
252#define KVM_IA64_VCPU_STACK_SIZE (1UL << KVM_IA64_VCPU_STACK_SHIFT)
253
254struct kvm_ia64_vcpu_stack {
255 unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
256};
257
258struct kvm_debug_exit_arch {
259};
260
261/* for KVM_SET_GUEST_DEBUG */
262struct kvm_guest_debug_arch {
263};
264
265/* definition of registers in kvm_run */
266struct kvm_sync_regs {
267};
268
269#endif