1#ifndef __ASM_IA64_KVM_H
2#define __ASM_IA64_KVM_H
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include <linux/types.h>
25#include <linux/ioctl.h>
26
27
28#define __KVM_HAVE_IOAPIC
29#define __KVM_HAVE_DEVICE_ASSIGNMENT
30
31
32#define KVM_NR_INTERRUPTS 256
33
34#define KVM_IOAPIC_NUM_PINS 48
35
36struct kvm_ioapic_state {
37 __u64 base_address;
38 __u32 ioregsel;
39 __u32 id;
40 __u32 irr;
41 __u32 pad;
42 union {
43 __u64 bits;
44 struct {
45 __u8 vector;
46 __u8 delivery_mode:3;
47 __u8 dest_mode:1;
48 __u8 delivery_status:1;
49 __u8 polarity:1;
50 __u8 remote_irr:1;
51 __u8 trig_mode:1;
52 __u8 mask:1;
53 __u8 reserve:7;
54 __u8 reserved[4];
55 __u8 dest_id;
56 } fields;
57 } redirtbl[KVM_IOAPIC_NUM_PINS];
58};
59
60#define KVM_IRQCHIP_PIC_MASTER 0
61#define KVM_IRQCHIP_PIC_SLAVE 1
62#define KVM_IRQCHIP_IOAPIC 2
63
64#define KVM_CONTEXT_SIZE 8*1024
65
66struct kvm_fpreg {
67 union {
68 unsigned long bits[2];
69 long double __dummy;
70 } u;
71};
72
73union context {
74
75 char dummy[KVM_CONTEXT_SIZE];
76 struct {
77 unsigned long psr;
78 unsigned long pr;
79 unsigned long caller_unat;
80 unsigned long pad;
81 unsigned long gr[32];
82 unsigned long ar[128];
83 unsigned long br[8];
84 unsigned long cr[128];
85 unsigned long rr[8];
86 unsigned long ibr[8];
87 unsigned long dbr[8];
88 unsigned long pkr[8];
89 struct kvm_fpreg fr[128];
90 };
91};
92
93struct thash_data {
94 union {
95 struct {
96 unsigned long p : 1;
97 unsigned long rv1 : 1;
98 unsigned long ma : 3;
99 unsigned long a : 1;
100 unsigned long d : 1;
101 unsigned long pl : 2;
102 unsigned long ar : 3;
103 unsigned long ppn : 38;
104 unsigned long rv2 : 2;
105 unsigned long ed : 1;
106 unsigned long ig1 : 11;
107 };
108 struct {
109 unsigned long __rv1 : 53;
110 unsigned long contiguous : 1;
111 unsigned long tc : 1;
112 unsigned long cl : 1;
113
114 unsigned long len : 4;
115 unsigned long io : 1;
116 unsigned long nomap : 1;
117
118 unsigned long checked : 1;
119
120 unsigned long invalid : 1;
121
122 };
123 unsigned long page_flags;
124 };
125
126 union {
127 struct {
128 unsigned long rv3 : 2;
129 unsigned long ps : 6;
130 unsigned long key : 24;
131 unsigned long rv4 : 32;
132 };
133 unsigned long itir;
134 };
135 union {
136 struct {
137 unsigned long ig2 : 12;
138 unsigned long vpn : 49;
139 unsigned long vrn : 3;
140 };
141 unsigned long ifa;
142 unsigned long vadr;
143 struct {
144 unsigned long tag : 63;
145 unsigned long ti : 1;
146 };
147 unsigned long etag;
148 };
149 union {
150 struct thash_data *next;
151 unsigned long rid;
152 unsigned long gpaddr;
153 };
154};
155
156#define NITRS 8
157#define NDTRS 8
158
159struct saved_vpd {
160 unsigned long vhpi;
161 unsigned long vgr[16];
162 unsigned long vbgr[16];
163 unsigned long vnat;
164 unsigned long vbnat;
165 unsigned long vcpuid[5];
166 unsigned long vpsr;
167 unsigned long vpr;
168 union {
169 unsigned long vcr[128];
170 struct {
171 unsigned long dcr;
172 unsigned long itm;
173 unsigned long iva;
174 unsigned long rsv1[5];
175 unsigned long pta;
176 unsigned long rsv2[7];
177 unsigned long ipsr;
178 unsigned long isr;
179 unsigned long rsv3;
180 unsigned long iip;
181 unsigned long ifa;
182 unsigned long itir;
183 unsigned long iipa;
184 unsigned long ifs;
185 unsigned long iim;
186 unsigned long iha;
187 unsigned long rsv4[38];
188 unsigned long lid;
189 unsigned long ivr;
190 unsigned long tpr;
191 unsigned long eoi;
192 unsigned long irr[4];
193 unsigned long itv;
194 unsigned long pmv;
195 unsigned long cmcv;
196 unsigned long rsv5[5];
197 unsigned long lrr0;
198 unsigned long lrr1;
199 unsigned long rsv6[46];
200 };
201 };
202};
203
204struct kvm_regs {
205 struct saved_vpd vpd;
206
207 int mp_state;
208 unsigned long vmm_rr;
209
210 struct thash_data itrs[NITRS];
211 struct thash_data dtrs[NDTRS];
212
213 unsigned char itr_regions;
214 unsigned char dtr_regions;
215 unsigned char tc_regions;
216
217 char irq_check;
218 unsigned long saved_itc;
219 unsigned long itc_check;
220 unsigned long timer_check;
221 unsigned long timer_pending;
222 unsigned long last_itc;
223
224 unsigned long vrr[8];
225 unsigned long ibr[8];
226 unsigned long dbr[8];
227 unsigned long insvc[4];
228 unsigned long xtp;
229
230 unsigned long metaphysical_rr0;
231 unsigned long metaphysical_rr4;
232 unsigned long metaphysical_saved_rr0;
233 unsigned long metaphysical_saved_rr4;
234 unsigned long fp_psr;
235 unsigned long saved_gp;
236
237
238 union context saved_guest;
239
240 unsigned long reserved[64];
241};
242
243struct kvm_sregs {
244};
245
246struct kvm_fpu {
247};
248
249#define KVM_IA64_VCPU_STACK_SHIFT 16
250#define KVM_IA64_VCPU_STACK_SIZE (1UL << KVM_IA64_VCPU_STACK_SHIFT)
251
252struct kvm_ia64_vcpu_stack {
253 unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
254};
255
256struct kvm_debug_exit_arch {
257};
258
259
260struct kvm_guest_debug_arch {
261};
262
263#endif
264