vmx_vcpu.h
来自「xen虚拟机源代码安装包」· C头文件 代码 · 共 726 行 · 第 1/2 页
H
726 行
/* -*- Mode:C; c-basic-offset:8; tab-width:8; indent-tabs-mode:nil -*- *//* * vmx_vcpu.h: * Copyright (c) 2005, Intel Corporation. * * 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. * * Xuefei Xu (Anthony Xu) (Anthony.xu@intel.com) * Yaozu Dong (Eddie Dong) (Eddie.dong@intel.com) */#ifndef _XEN_IA64_VMX_VCPU_H#define _XEN_IA64_VMX_VCPU_H#include <xen/sched.h>#include <asm/ia64_int.h>#include <asm/vmx_vpd.h>#include <asm/ptrace.h>#include <asm/regs.h>#include <asm/regionreg.h>#include <asm/types.h>#include <asm/vcpu.h>#define VRN_SHIFT 61#define VRN0 0x0UL#define VRN1 0x1UL#define VRN2 0x2UL#define VRN3 0x3UL#define VRN4 0x4UL#define VRN5 0x5UL#define VRN6 0x6UL#define VRN7 0x7UL// for vlsapic#define VLSAPIC_INSVC(vcpu, i) ((vcpu)->arch.insvc[i])#define VMX(x,y) ((x)->arch.arch_vmx.y)#define VMM_RR_SHIFT 20#define VMM_RR_MASK ((1UL<<VMM_RR_SHIFT)-1)extern u64 indirect_reg_igfld_MASK(int type, int index, u64 value);extern u64 cr_igfld_mask(int index, u64 value);extern int check_indirect_reg_rsv_fields(int type, int index, u64 value);extern u64 set_isr_ei_ni(VCPU * vcpu);extern u64 set_isr_for_na_inst(VCPU * vcpu, int op);extern void set_illegal_op_isr (VCPU *vcpu);/* next all for VTI domain APIs definition */extern void vmx_vcpu_set_psr(VCPU * vcpu, unsigned long value);extern IA64FAULT vmx_vcpu_cover(VCPU * vcpu);extern IA64FAULT vmx_vcpu_set_rr(VCPU * vcpu, u64 reg, u64 val);extern u64 vmx_vcpu_get_pkr(VCPU * vcpu, u64 reg);IA64FAULT vmx_vcpu_set_pkr(VCPU * vcpu, u64 reg, u64 val);extern IA64FAULT vmx_vcpu_itc_i(VCPU * vcpu, u64 pte, u64 itir, u64 ifa);extern IA64FAULT vmx_vcpu_itc_d(VCPU * vcpu, u64 pte, u64 itir, u64 ifa);extern IA64FAULT vmx_vcpu_itr_i(VCPU * vcpu, u64 slot, u64 pte, u64 itir, u64 ifa);extern IA64FAULT vmx_vcpu_itr_d(VCPU * vcpu, u64 slot, u64 pte, u64 itir, u64 ifa);extern IA64FAULT vmx_vcpu_ptr_d(VCPU * vcpu, u64 vadr, u64 ps);extern IA64FAULT vmx_vcpu_ptr_i(VCPU * vcpu, u64 vadr, u64 ps);extern IA64FAULT vmx_vcpu_ptc_l(VCPU * vcpu, u64 vadr, u64 ps);extern IA64FAULT vmx_vcpu_ptc_e(VCPU * vcpu, u64 vadr);extern IA64FAULT vmx_vcpu_ptc_g(VCPU * vcpu, u64 vadr, u64 ps);extern IA64FAULT vmx_vcpu_ptc_ga(VCPU * vcpu, u64 vadr, u64 ps);extern u64 vmx_vcpu_thash(VCPU * vcpu, u64 vadr);extern u64 vmx_vcpu_get_itir_on_fault(VCPU * vcpu, u64 ifa);extern u64 vmx_vcpu_ttag(VCPU * vcpu, u64 vadr);extern IA64FAULT vmx_vcpu_tpa(VCPU * vcpu, u64 vadr, u64 * padr);extern u64 vmx_vcpu_tak(VCPU * vcpu, u64 vadr);extern IA64FAULT vmx_vcpu_rfi(VCPU * vcpu);extern u64 vmx_vcpu_get_psr(VCPU * vcpu);extern IA64FAULT vmx_vcpu_get_bgr(VCPU * vcpu, unsigned int reg, u64 * val);extern IA64FAULT vmx_vcpu_set_bgr(VCPU * vcpu, unsigned int reg, u64 val, int nat);#if 0extern IA64FAULT vmx_vcpu_get_gr(VCPU * vcpu, unsigned reg, u64 * val);extern IA64FAULT vmx_vcpu_set_gr(VCPU * vcpu, unsigned reg, u64 value, int nat);#endifextern IA64FAULT vmx_vcpu_reset_psr_sm(VCPU * vcpu, u64 imm24);extern IA64FAULT vmx_vcpu_set_psr_sm(VCPU * vcpu, u64 imm24);extern IA64FAULT vmx_vcpu_set_psr_l(VCPU * vcpu, u64 val);extern void vtm_init(VCPU * vcpu);extern uint64_t vtm_get_itc(VCPU * vcpu);extern void vtm_set_itc(VCPU * vcpu, uint64_t new_itc);extern void vtm_set_itv(VCPU * vcpu, uint64_t val);extern void vtm_set_itm(VCPU * vcpu, uint64_t val);extern void vlsapic_reset(VCPU * vcpu);extern int vmx_check_pending_irq(VCPU * vcpu);extern void guest_write_eoi(VCPU * vcpu);extern int is_unmasked_irq(VCPU * vcpu);extern uint64_t guest_read_vivr(VCPU * vcpu);extern int vmx_vcpu_pend_interrupt(VCPU * vcpu, uint8_t vector);extern void vcpu_load_kernel_regs(VCPU * vcpu);extern void __vmx_switch_rr7(unsigned long rid, void *guest_vhpt, void *shared_arch_info);extern void vmx_switch_rr7(unsigned long rid, void *guest_vhpt, void *shared_arch_info);extern void vmx_ia64_set_dcr(VCPU * v);extern void inject_guest_interruption(struct vcpu *vcpu, u64 vec);extern void vmx_asm_bsw0(void);extern void vmx_asm_bsw1(void);/************************************************************************** VCPU control register access routines**************************************************************************/static inline u64 vmx_vcpu_get_itm(VCPU * vcpu){ return ((u64)VCPU(vcpu, itm));}static inline u64 vmx_vcpu_get_iva(VCPU * vcpu){ return ((u64)VCPU(vcpu, iva));}static inline u64 vmx_vcpu_get_pta(VCPU * vcpu){ return ((u64)VCPU(vcpu, pta));}static inline u64 vmx_vcpu_get_lid(VCPU * vcpu){ return ((u64)VCPU(vcpu, lid));}static inline u64 vmx_vcpu_get_ivr(VCPU * vcpu){ return ((u64)guest_read_vivr(vcpu));}static inline u64 vmx_vcpu_get_tpr(VCPU * vcpu){ return ((u64)VCPU(vcpu, tpr));}static inline u64 vmx_vcpu_get_eoi(VCPU * vcpu){ return (0UL); // reads of eoi always return 0}static inline u64 vmx_vcpu_get_irr0(VCPU * vcpu){ return ((u64)VCPU(vcpu, irr[0]));}static inline u64 vmx_vcpu_get_irr1(VCPU * vcpu){ return ((u64)VCPU(vcpu, irr[1]));}static inline u64 vmx_vcpu_get_irr2(VCPU * vcpu){ return ((u64)VCPU(vcpu, irr[2]));}static inline u64 vmx_vcpu_get_irr3(VCPU * vcpu){ return ((u64)VCPU(vcpu, irr[3]));}static inline u64 vmx_vcpu_get_itv(VCPU * vcpu){ return ((u64)VCPU(vcpu, itv));}static inline u64 vmx_vcpu_get_pmv(VCPU * vcpu){ return ((u64)VCPU(vcpu, pmv));}static inline u64 vmx_vcpu_get_cmcv(VCPU * vcpu){ return ((u64)VCPU(vcpu, cmcv));}static inline u64 vmx_vcpu_get_lrr0(VCPU * vcpu){ return ((u64)VCPU(vcpu, lrr0));}static inline u64 vmx_vcpu_get_lrr1(VCPU * vcpu){ return ((u64)VCPU(vcpu, lrr1));}static inline IA64FAULT vmx_vcpu_set_itm(VCPU * vcpu, u64 val){ vtm_set_itm(vcpu, val); return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_iva(VCPU * vcpu, u64 val){ VCPU(vcpu, iva) = val; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_pta(VCPU * vcpu, u64 val){ VCPU(vcpu, pta) = val; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_lid(VCPU * vcpu, u64 val){ VCPU(vcpu, lid) = val; return IA64_NO_FAULT;}extern IA64FAULT vmx_vcpu_set_tpr(VCPU * vcpu, u64 val);static inline IA64FAULT vmx_vcpu_set_eoi(VCPU * vcpu, u64 val){ guest_write_eoi(vcpu); return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_itv(VCPU * vcpu, u64 val){ vtm_set_itv(vcpu, val); return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_pmv(VCPU * vcpu, u64 val){ VCPU(vcpu, pmv) = val; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_cmcv(VCPU * vcpu, u64 val){ VCPU(vcpu, cmcv) = val; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_lrr0(VCPU * vcpu, u64 val){ VCPU(vcpu, lrr0) = val; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_lrr1(VCPU * vcpu, u64 val){ VCPU(vcpu, lrr1) = val; return IA64_NO_FAULT;}/************************************************************************** VCPU privileged application register access routines**************************************************************************/static inline IA64FAULT vmx_vcpu_set_itc(VCPU * vcpu, u64 val){ vtm_set_itc(vcpu, val); return IA64_NO_FAULT;}static inline u64 vmx_vcpu_get_itc(VCPU * vcpu){ return ((u64)vtm_get_itc(vcpu));}/*static inlineIA64FAULT vmx_vcpu_get_rr(VCPU *vcpu, u64 reg, u64 *pval){ *pval = VMX(vcpu,vrr[reg>>61]); return IA64_NO_FAULT;} *//************************************************************************** VCPU debug breakpoint register access routines**************************************************************************/static inline u64 vmx_vcpu_get_cpuid(VCPU * vcpu, u64 reg){ // TODO: unimplemented DBRs return a reserved register fault // TODO: Should set Logical CPU state, not just physical if (reg > 4) { panic_domain(vcpu_regs(vcpu), "there are only five cpuid registers"); } return ((u64)VCPU(vcpu, vcpuid[reg]));}static inline IA64FAULT vmx_vcpu_set_dbr(VCPU * vcpu, u64 reg, u64 val){ return vcpu_set_dbr(vcpu, reg, val);}static inline IA64FAULT vmx_vcpu_set_ibr(VCPU * vcpu, u64 reg, u64 val){ return vcpu_set_ibr(vcpu, reg, val);}static inline IA64FAULT vmx_vcpu_get_dbr(VCPU * vcpu, u64 reg, u64 *pval){ return vcpu_get_dbr(vcpu, reg, pval);}static inline IA64FAULT vmx_vcpu_get_ibr(VCPU * vcpu, u64 reg, u64 *pval){ return vcpu_get_ibr(vcpu, reg, pval);}/************************************************************************** VCPU performance monitor register access routines**************************************************************************/static inline IA64FAULT vmx_vcpu_set_pmc(VCPU * vcpu, u64 reg, u64 val){ // TODO: Should set Logical CPU state, not just physical // NOTE: Writes to unimplemented PMC registers are discarded ia64_set_pmc(reg, val); return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_set_pmd(VCPU * vcpu, u64 reg, u64 val){ // TODO: Should set Logical CPU state, not just physical // NOTE: Writes to unimplemented PMD registers are discarded ia64_set_pmd(reg, val); return IA64_NO_FAULT;}static inline u64 vmx_vcpu_get_pmc(VCPU * vcpu, u64 reg){ // NOTE: Reads from unimplemented PMC registers return zero return ((u64)ia64_get_pmc(reg));}static inline u64 vmx_vcpu_get_pmd(VCPU * vcpu, u64 reg){ // NOTE: Reads from unimplemented PMD registers return zero return ((u64)ia64_get_pmd(reg));}/************************************************************************** VCPU banked general register access routines**************************************************************************/#if 0static inline IA64FAULT vmx_vcpu_bsw0(VCPU * vcpu){ VCPU(vcpu, vpsr) &= ~IA64_PSR_BN; return IA64_NO_FAULT;}static inline IA64FAULT vmx_vcpu_bsw1(VCPU * vcpu){ VCPU(vcpu, vpsr) |= IA64_PSR_BN;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?