⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 support.h

📁 xen虚拟机源代码安装包
💻 H
字号:
/* * support.h: HVM support routines used by VT-x and SVM. * * Leendert van Doorn, leendert@watson.ibm.com * Copyright (c) 2005, International Business Machines 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. */#ifndef __ASM_X86_HVM_SUPPORT_H__#define __ASM_X86_HVM_SUPPORT_H__#include <xen/sched.h>#include <xen/hvm/save.h>#include <asm/types.h>#include <asm/regs.h>#include <asm/processor.h>static inline vcpu_iodata_t *get_ioreq(struct vcpu *v){    struct domain *d = v->domain;    shared_iopage_t *p = d->arch.hvm_domain.ioreq.va;    ASSERT((v == current) || spin_is_locked(&d->arch.hvm_domain.ioreq.lock));    ASSERT(d->arch.hvm_domain.ioreq.va != NULL);    return &p->vcpu_iodata[v->vcpu_id];}#define HVM_DELIVER_NO_ERROR_CODE  -1#ifndef NDEBUG#define DBG_LEVEL_0                 (1 << 0)#define DBG_LEVEL_1                 (1 << 1)#define DBG_LEVEL_2                 (1 << 2)#define DBG_LEVEL_3                 (1 << 3)#define DBG_LEVEL_IO                (1 << 4)#define DBG_LEVEL_VMMU              (1 << 5)#define DBG_LEVEL_VLAPIC            (1 << 6)#define DBG_LEVEL_VLAPIC_TIMER      (1 << 7)#define DBG_LEVEL_VLAPIC_INTERRUPT  (1 << 8)#define DBG_LEVEL_IOAPIC            (1 << 9)#define DBG_LEVEL_HCALL             (1 << 10)#define DBG_LEVEL_MSR               (1 << 11)extern unsigned int opt_hvm_debug_level;#define HVM_DBG_LOG(level, _f, _a...)                                         \    do {                                                                      \        if ( unlikely((level) & opt_hvm_debug_level) )                        \            printk("[HVM:%d.%d] <%s> " _f "\n",                               \                   current->domain->domain_id, current->vcpu_id, __func__,    \                   ## _a);                                                    \    } while (0)#else#define HVM_DBG_LOG(level, _f, _a...)#endifextern unsigned long hvm_io_bitmap[];void hvm_enable(struct hvm_function_table *);enum hvm_copy_result {    HVMCOPY_okay = 0,    HVMCOPY_bad_gva_to_gfn,    HVMCOPY_bad_gfn_to_mfn};/* * Copy to/from a guest physical address. * Returns HVMCOPY_okay, else HVMCOPY_bad_gfn_to_mfn if the given physical * address range does not map entirely onto ordinary machine memory. */enum hvm_copy_result hvm_copy_to_guest_phys(    paddr_t paddr, void *buf, int size);enum hvm_copy_result hvm_copy_from_guest_phys(    void *buf, paddr_t paddr, int size);/* * Copy to/from a guest virtual address. @pfec should include PFEC_user_mode * if emulating a user-mode access (CPL=3). All other flags in @pfec are * managed by the called function: it is therefore optional for the caller * to set them. *  * Returns: *  HVMCOPY_okay: Copy was entirely successful. *  HVMCOPY_bad_gfn_to_mfn: Some guest physical address did not map to *                          ordinary machine memory. *  HVMCOPY_bad_gva_to_gfn: Some guest virtual address did not have a valid *                          mapping to a guest physical address. In this case *                          a page fault exception is automatically queued *                          for injection into the current HVM VCPU. */enum hvm_copy_result hvm_copy_to_guest_virt(    unsigned long vaddr, void *buf, int size, uint32_t pfec);enum hvm_copy_result hvm_copy_from_guest_virt(    void *buf, unsigned long vaddr, int size, uint32_t pfec);enum hvm_copy_result hvm_fetch_from_guest_virt(    void *buf, unsigned long vaddr, int size, uint32_t pfec);/* * As above (copy to/from a guest virtual address), but no fault is generated * when HVMCOPY_bad_gva_to_gfn is returned. */enum hvm_copy_result hvm_copy_to_guest_virt_nofault(    unsigned long vaddr, void *buf, int size, uint32_t pfec);enum hvm_copy_result hvm_copy_from_guest_virt_nofault(    void *buf, unsigned long vaddr, int size, uint32_t pfec);enum hvm_copy_result hvm_fetch_from_guest_virt_nofault(    void *buf, unsigned long vaddr, int size, uint32_t pfec);#define HVM_HCALL_completed  0 /* hypercall completed - no further action */#define HVM_HCALL_preempted  1 /* hypercall preempted - re-execute VMCALL */#define HVM_HCALL_invalidate 2 /* invalidate ioemu-dm memory cache        */int hvm_do_hypercall(struct cpu_user_regs *pregs);void hvm_hlt(unsigned long rflags);void hvm_triple_fault(void);extern int opt_softtsc;void hvm_rdtsc_intercept(struct cpu_user_regs *regs);/* These functions all return X86EMUL return codes. */int hvm_set_efer(uint64_t value);int hvm_set_cr0(unsigned long value);int hvm_set_cr3(unsigned long value);int hvm_set_cr4(unsigned long value);int hvm_msr_read_intercept(struct cpu_user_regs *regs);int hvm_msr_write_intercept(struct cpu_user_regs *regs);#endif /* __ASM_X86_HVM_SUPPORT_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -