Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 | /* * vti.h: prototype for generial vt related interface * Copyright (c) 2004, Intel Corporation. * * Xuefei Xu (Anthony Xu) (anthony.xu@intel.com) * Fred Yang (fred.yang@intel.com) * Kun Tian (Kevin Tian) (kevin.tian@intel.com) * * Copyright (c) 2007, Intel Corporation. * Zhang xiantao <xiantao.zhang@intel.com> * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307 USA. */ #ifndef _KVM_VT_I_H #define _KVM_VT_I_H #ifndef __ASSEMBLY__ #include <asm/page.h> #include <linux/kvm_host.h> /* define itr.i and itr.d in ia64_itr function */ #define ITR 0x01 #define DTR 0x02 #define IaDTR 0x03 #define IA64_TR_VMM 6 /*itr6, dtr6 : maps vmm code, vmbuffer*/ #define IA64_TR_VM_DATA 7 /*dtr7 : maps current vm data*/ #define RR6 (6UL<<61) #define RR7 (7UL<<61) /* config_options in pal_vp_init_env */ #define VP_INITIALIZE 1UL #define VP_FR_PMC 1UL<<1 #define VP_OPCODE 1UL<<8 #define VP_CAUSE 1UL<<9 #define VP_FW_ACC 1UL<<63 /* init vp env with initializing vm_buffer */ #define VP_INIT_ENV_INITALIZE (VP_INITIALIZE | VP_FR_PMC |\ VP_OPCODE | VP_CAUSE | VP_FW_ACC) /* init vp env without initializing vm_buffer */ #define VP_INIT_ENV VP_FR_PMC | VP_OPCODE | VP_CAUSE | VP_FW_ACC #define PAL_VP_CREATE 265 /* Stacked Virt. Initializes a new VPD for the operation of * a new virtual processor in the virtual environment. */ #define PAL_VP_ENV_INFO 266 /*Stacked Virt. Returns the parameters needed to enter a virtual environment.*/ #define PAL_VP_EXIT_ENV 267 /*Stacked Virt. Allows a logical processor to exit a virtual environment.*/ #define PAL_VP_INIT_ENV 268 /*Stacked Virt. Allows a logical processor to enter a virtual environment.*/ #define PAL_VP_REGISTER 269 /*Stacked Virt. Register a different host IVT for the virtual processor.*/ #define PAL_VP_RESUME 270 /* Renamed from PAL_VP_RESUME */ #define PAL_VP_RESTORE 270 /*Stacked Virt. Resumes virtual processor operation on the logical processor.*/ #define PAL_VP_SUSPEND 271 /* Renamed from PAL_VP_SUSPEND */ #define PAL_VP_SAVE 271 /* Stacked Virt. Suspends operation for the specified virtual processor on * the logical processor. */ #define PAL_VP_TERMINATE 272 /* Stacked Virt. Terminates operation for the specified virtual processor.*/ union vac { unsigned long value; struct { unsigned int a_int:1; unsigned int a_from_int_cr:1; unsigned int a_to_int_cr:1; unsigned int a_from_psr:1; unsigned int a_from_cpuid:1; unsigned int a_cover:1; unsigned int a_bsw:1; long reserved:57; }; }; union vdc { unsigned long value; struct { unsigned int d_vmsw:1; unsigned int d_extint:1; unsigned int d_ibr_dbr:1; unsigned int d_pmc:1; unsigned int d_to_pmd:1; unsigned int d_itm:1; long reserved:58; }; }; struct vpd { union vac vac; union vdc vdc; unsigned long virt_env_vaddr; unsigned long reserved1[29]; unsigned long vhpi; unsigned long reserved2[95]; unsigned long vgr[16]; unsigned long vbgr[16]; unsigned long vnat; unsigned long vbnat; unsigned long vcpuid[5]; unsigned long reserved3[11]; unsigned long vpsr; unsigned long vpr; unsigned long reserved4[76]; union { unsigned long vcr[128]; struct { unsigned long dcr; unsigned long itm; unsigned long iva; unsigned long rsv1[5]; unsigned long pta; unsigned long rsv2[7]; unsigned long ipsr; unsigned long isr; unsigned long rsv3; unsigned long iip; unsigned long ifa; unsigned long itir; unsigned long iipa; unsigned long ifs; unsigned long iim; unsigned long iha; unsigned long rsv4[38]; unsigned long lid; unsigned long ivr; unsigned long tpr; unsigned long eoi; unsigned long irr[4]; unsigned long itv; unsigned long pmv; unsigned long cmcv; unsigned long rsv5[5]; unsigned long lrr0; unsigned long lrr1; unsigned long rsv6[46]; }; }; unsigned long reserved5[128]; unsigned long reserved6[3456]; unsigned long vmm_avail[128]; unsigned long reserved7[4096]; }; #define PAL_PROC_VM_BIT (1UL << 40) #define PAL_PROC_VMSW_BIT (1UL << 54) static inline s64 ia64_pal_vp_env_info(u64 *buffer_size, u64 *vp_env_info) { struct ia64_pal_retval iprv; PAL_CALL_STK(iprv, PAL_VP_ENV_INFO, 0, 0, 0); *buffer_size = iprv.v0; *vp_env_info = iprv.v1; return iprv.status; } static inline s64 ia64_pal_vp_exit_env(u64 iva) { struct ia64_pal_retval iprv; PAL_CALL_STK(iprv, PAL_VP_EXIT_ENV, (u64)iva, 0, 0); return iprv.status; } static inline s64 ia64_pal_vp_init_env(u64 config_options, u64 pbase_addr, u64 vbase_addr, u64 *vsa_base) { struct ia64_pal_retval iprv; PAL_CALL_STK(iprv, PAL_VP_INIT_ENV, config_options, pbase_addr, vbase_addr); *vsa_base = iprv.v0; return iprv.status; } static inline s64 ia64_pal_vp_restore(u64 *vpd, u64 pal_proc_vector) { struct ia64_pal_retval iprv; PAL_CALL_STK(iprv, PAL_VP_RESTORE, (u64)vpd, pal_proc_vector, 0); return iprv.status; } static inline s64 ia64_pal_vp_save(u64 *vpd, u64 pal_proc_vector) { struct ia64_pal_retval iprv; PAL_CALL_STK(iprv, PAL_VP_SAVE, (u64)vpd, pal_proc_vector, 0); return iprv.status; } #endif /*VPD field offset*/ #define VPD_VAC_START_OFFSET 0 #define VPD_VDC_START_OFFSET 8 #define VPD_VHPI_START_OFFSET 256 #define VPD_VGR_START_OFFSET 1024 #define VPD_VBGR_START_OFFSET 1152 #define VPD_VNAT_START_OFFSET 1280 #define VPD_VBNAT_START_OFFSET 1288 #define VPD_VCPUID_START_OFFSET 1296 #define VPD_VPSR_START_OFFSET 1424 #define VPD_VPR_START_OFFSET 1432 #define VPD_VRSE_CFLE_START_OFFSET 1440 #define VPD_VCR_START_OFFSET 2048 #define VPD_VTPR_START_OFFSET 2576 #define VPD_VRR_START_OFFSET 3072 #define VPD_VMM_VAIL_START_OFFSET 31744 /*Virtualization faults*/ #define EVENT_MOV_TO_AR 1 #define EVENT_MOV_TO_AR_IMM 2 #define EVENT_MOV_FROM_AR 3 #define EVENT_MOV_TO_CR 4 #define EVENT_MOV_FROM_CR 5 #define EVENT_MOV_TO_PSR 6 #define EVENT_MOV_FROM_PSR 7 #define EVENT_ITC_D 8 #define EVENT_ITC_I 9 #define EVENT_MOV_TO_RR 10 #define EVENT_MOV_TO_DBR 11 #define EVENT_MOV_TO_IBR 12 #define EVENT_MOV_TO_PKR 13 #define EVENT_MOV_TO_PMC 14 #define EVENT_MOV_TO_PMD 15 #define EVENT_ITR_D 16 #define EVENT_ITR_I 17 #define EVENT_MOV_FROM_RR 18 #define EVENT_MOV_FROM_DBR 19 #define EVENT_MOV_FROM_IBR 20 #define EVENT_MOV_FROM_PKR 21 #define EVENT_MOV_FROM_PMC 22 #define EVENT_MOV_FROM_CPUID 23 #define EVENT_SSM 24 #define EVENT_RSM 25 #define EVENT_PTC_L 26 #define EVENT_PTC_G 27 #define EVENT_PTC_GA 28 #define EVENT_PTR_D 29 #define EVENT_PTR_I 30 #define EVENT_THASH 31 #define EVENT_TTAG 32 #define EVENT_TPA 33 #define EVENT_TAK 34 #define EVENT_PTC_E 35 #define EVENT_COVER 36 #define EVENT_RFI 37 #define EVENT_BSW_0 38 #define EVENT_BSW_1 39 #define EVENT_VMSW 40 /**PAL virtual services offsets */ #define PAL_VPS_RESUME_NORMAL 0x0000 #define PAL_VPS_RESUME_HANDLER 0x0400 #define PAL_VPS_SYNC_READ 0x0800 #define PAL_VPS_SYNC_WRITE 0x0c00 #define PAL_VPS_SET_PENDING_INTERRUPT 0x1000 #define PAL_VPS_THASH 0x1400 #define PAL_VPS_TTAG 0x1800 #define PAL_VPS_RESTORE 0x1c00 #define PAL_VPS_SAVE 0x2000 #endif/* _VT_I_H*/ |