Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
kvm.h
Go to the documentation of this file.
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 <[email protected]>
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 
43  union {
45  struct {
57  } fields;
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 */
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. */
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 
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 
256 };
257 
259 };
260 
261 /* for KVM_SET_GUEST_DEBUG */
263 };
264 
265 /* definition of registers in kvm_run */
267 };
268 
269 #endif