Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck...
[pandora-kernel.git] / arch / ia64 / include / asm / kvm.h
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
37 struct 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
68 struct kvm_fpreg {
69         union {
70                 unsigned long bits[2];
71                 long double __dummy;    /* force 16-byte alignment */
72         } u;
73 };
74
75 union 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
95 struct 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
161 struct 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
206 struct 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
245 struct kvm_sregs {
246 };
247
248 struct 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
254 struct kvm_ia64_vcpu_stack {
255         unsigned char stack[KVM_IA64_VCPU_STACK_SIZE];
256 };
257
258 struct kvm_debug_exit_arch {
259 };
260
261 /* for KVM_SET_GUEST_DEBUG */
262 struct kvm_guest_debug_arch {
263 };
264
265 /* definition of registers in kvm_run */
266 struct kvm_sync_regs {
267 };
268
269 #endif