Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.7-rc6 269 lines 6.3 kB view raw
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