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

📄 xen.h

📁 xen虚拟机源代码安装包
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * xen.h *  * Guest OS interface to Xen. *  * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * * Copyright (c) 2004, K A Fraser */#ifndef __XEN_PUBLIC_XEN_H__#define __XEN_PUBLIC_XEN_H__#include "xen-compat.h"#if defined(__i386__) || defined(__x86_64__)#include "arch-x86/xen.h"#elif defined(__ia64__)#include "arch-ia64.h"#else#error "Unsupported architecture"#endif#ifndef __ASSEMBLY__/* Guest handles for primitive C types. */DEFINE_XEN_GUEST_HANDLE(char);__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);DEFINE_XEN_GUEST_HANDLE(int);__DEFINE_XEN_GUEST_HANDLE(uint,  unsigned int);DEFINE_XEN_GUEST_HANDLE(long);__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);DEFINE_XEN_GUEST_HANDLE(void);DEFINE_XEN_GUEST_HANDLE(xen_pfn_t);#endif/* * HYPERCALLS */#define __HYPERVISOR_set_trap_table        0#define __HYPERVISOR_mmu_update            1#define __HYPERVISOR_set_gdt               2#define __HYPERVISOR_stack_switch          3#define __HYPERVISOR_set_callbacks         4#define __HYPERVISOR_fpu_taskswitch        5#define __HYPERVISOR_sched_op_compat       6 /* compat since 0x00030101 */#define __HYPERVISOR_platform_op           7#define __HYPERVISOR_set_debugreg          8#define __HYPERVISOR_get_debugreg          9#define __HYPERVISOR_update_descriptor    10#define __HYPERVISOR_memory_op            12#define __HYPERVISOR_multicall            13#define __HYPERVISOR_update_va_mapping    14#define __HYPERVISOR_set_timer_op         15#define __HYPERVISOR_event_channel_op_compat 16 /* compat since 0x00030202 */#define __HYPERVISOR_xen_version          17#define __HYPERVISOR_console_io           18#define __HYPERVISOR_physdev_op_compat    19 /* compat since 0x00030202 */#define __HYPERVISOR_grant_table_op       20#define __HYPERVISOR_vm_assist            21#define __HYPERVISOR_update_va_mapping_otherdomain 22#define __HYPERVISOR_iret                 23 /* x86 only */#define __HYPERVISOR_vcpu_op              24#define __HYPERVISOR_set_segment_base     25 /* x86/64 only */#define __HYPERVISOR_mmuext_op            26#define __HYPERVISOR_xsm_op               27#define __HYPERVISOR_nmi_op               28#define __HYPERVISOR_sched_op             29#define __HYPERVISOR_callback_op          30#define __HYPERVISOR_xenoprof_op          31#define __HYPERVISOR_event_channel_op     32#define __HYPERVISOR_physdev_op           33#define __HYPERVISOR_hvm_op               34#define __HYPERVISOR_sysctl               35#define __HYPERVISOR_domctl               36#define __HYPERVISOR_kexec_op             37/* Architecture-specific hypercall definitions. */#define __HYPERVISOR_arch_0               48#define __HYPERVISOR_arch_1               49#define __HYPERVISOR_arch_2               50#define __HYPERVISOR_arch_3               51#define __HYPERVISOR_arch_4               52#define __HYPERVISOR_arch_5               53#define __HYPERVISOR_arch_6               54#define __HYPERVISOR_arch_7               55/* * HYPERCALL COMPATIBILITY. *//* New sched_op hypercall introduced in 0x00030101. */#if __XEN_INTERFACE_VERSION__ < 0x00030101#undef __HYPERVISOR_sched_op#define __HYPERVISOR_sched_op __HYPERVISOR_sched_op_compat#endif/* New event-channel and physdev hypercalls introduced in 0x00030202. */#if __XEN_INTERFACE_VERSION__ < 0x00030202#undef __HYPERVISOR_event_channel_op#define __HYPERVISOR_event_channel_op __HYPERVISOR_event_channel_op_compat#undef __HYPERVISOR_physdev_op#define __HYPERVISOR_physdev_op __HYPERVISOR_physdev_op_compat#endif/* New platform_op hypercall introduced in 0x00030204. */#if __XEN_INTERFACE_VERSION__ < 0x00030204#define __HYPERVISOR_dom0_op __HYPERVISOR_platform_op#endif/*  * VIRTUAL INTERRUPTS *  * Virtual interrupts that a guest OS may receive from Xen. *  * In the side comments, 'V.' denotes a per-VCPU VIRQ while 'G.' denotes a * global VIRQ. The former can be bound once per VCPU and cannot be re-bound. * The latter can be allocated only once per guest: they must initially be * allocated to VCPU0 but can subsequently be re-bound. */#define VIRQ_TIMER      0  /* V. Timebase update, and/or requested timeout.  */#define VIRQ_DEBUG      1  /* V. Request guest to dump debug info.           */#define VIRQ_CONSOLE    2  /* G. (DOM0) Bytes received on emergency console. */#define VIRQ_DOM_EXC    3  /* G. (DOM0) Exceptional event for some domain.   */#define VIRQ_TBUF       4  /* G. (DOM0) Trace buffer has records available.  */#define VIRQ_DEBUGGER   6  /* G. (DOM0) A domain has paused for debugging.   */#define VIRQ_XENOPROF   7  /* V. XenOprofile interrupt: new sample available */#define VIRQ_CON_RING   8  /* G. (DOM0) Bytes received on console            *//* Architecture-specific VIRQ definitions. */#define VIRQ_ARCH_0    16#define VIRQ_ARCH_1    17#define VIRQ_ARCH_2    18#define VIRQ_ARCH_3    19#define VIRQ_ARCH_4    20#define VIRQ_ARCH_5    21#define VIRQ_ARCH_6    22#define VIRQ_ARCH_7    23#define NR_VIRQS       24/* * MMU-UPDATE REQUESTS *  * HYPERVISOR_mmu_update() accepts a list of (ptr, val) pairs. * A foreigndom (FD) can be specified (or DOMID_SELF for none). * Where the FD has some effect, it is described below. * ptr[1:0] specifies the appropriate MMU_* command. *  * ptr[1:0] == MMU_NORMAL_PT_UPDATE: * Updates an entry in a page table. If updating an L1 table, and the new * table entry is valid/present, the mapped frame must belong to the FD, if * an FD has been specified. If attempting to map an I/O page then the * caller assumes the privilege of the FD. * FD == DOMID_IO: Permit /only/ I/O mappings, at the priv level of the caller. * FD == DOMID_XEN: Map restricted areas of Xen's heap space. * ptr[:2]  -- Machine address of the page-table entry to modify. * val      -- Value to write. *  * ptr[1:0] == MMU_MACHPHYS_UPDATE: * Updates an entry in the machine->pseudo-physical mapping table. * ptr[:2]  -- Machine address within the frame whose mapping to modify. *             The frame must belong to the FD, if one is specified. * val      -- Value to write into the mapping entry. *  * ptr[1:0] == MMU_PT_UPDATE_PRESERVE_AD: * As MMU_NORMAL_PT_UPDATE above, but A/D bits currently in the PTE are ORed * with those in @val. */#define MMU_NORMAL_PT_UPDATE      0 /* checked '*ptr = val'. ptr is MA.      */#define MMU_MACHPHYS_UPDATE       1 /* ptr = MA of frame to modify entry for */#define MMU_PT_UPDATE_PRESERVE_AD 2 /* atomically: *ptr = val | (*ptr&(A|D)) *//* * MMU EXTENDED OPERATIONS *  * HYPERVISOR_mmuext_op() accepts a list of mmuext_op structures. * A foreigndom (FD) can be specified (or DOMID_SELF for none). * Where the FD has some effect, it is described below. *  * cmd: MMUEXT_(UN)PIN_*_TABLE * mfn: Machine frame number to be (un)pinned as a p.t. page. *      The frame must belong to the FD, if one is specified. *  * cmd: MMUEXT_NEW_BASEPTR * mfn: Machine frame number of new page-table base to install in MMU. *  * cmd: MMUEXT_NEW_USER_BASEPTR [x86/64 only] * mfn: Machine frame number of new page-table base to install in MMU *      when in user space. *  * cmd: MMUEXT_TLB_FLUSH_LOCAL * No additional arguments. Flushes local TLB. *  * cmd: MMUEXT_INVLPG_LOCAL * linear_addr: Linear address to be flushed from the local TLB. *  * cmd: MMUEXT_TLB_FLUSH_MULTI * vcpumask: Pointer to bitmap of VCPUs to be flushed. *  * cmd: MMUEXT_INVLPG_MULTI * linear_addr: Linear address to be flushed. * vcpumask: Pointer to bitmap of VCPUs to be flushed. *  * cmd: MMUEXT_TLB_FLUSH_ALL * No additional arguments. Flushes all VCPUs' TLBs. *  * cmd: MMUEXT_INVLPG_ALL * linear_addr: Linear address to be flushed from all VCPUs' TLBs. *  * cmd: MMUEXT_FLUSH_CACHE * No additional arguments. Writes back and flushes cache contents. *  * cmd: MMUEXT_SET_LDT * linear_addr: Linear address of LDT base (NB. must be page-aligned). * nr_ents: Number of entries in LDT. */#define MMUEXT_PIN_L1_TABLE      0#define MMUEXT_PIN_L2_TABLE      1#define MMUEXT_PIN_L3_TABLE      2#define MMUEXT_PIN_L4_TABLE      3#define MMUEXT_UNPIN_TABLE       4#define MMUEXT_NEW_BASEPTR       5#define MMUEXT_TLB_FLUSH_LOCAL   6#define MMUEXT_INVLPG_LOCAL      7#define MMUEXT_TLB_FLUSH_MULTI   8#define MMUEXT_INVLPG_MULTI      9#define MMUEXT_TLB_FLUSH_ALL    10#define MMUEXT_INVLPG_ALL       11#define MMUEXT_FLUSH_CACHE      12#define MMUEXT_SET_LDT          13#define MMUEXT_NEW_USER_BASEPTR 15#ifndef __ASSEMBLY__struct mmuext_op {    unsigned int cmd;    union {        /* [UN]PIN_TABLE, NEW_BASEPTR, NEW_USER_BASEPTR */        xen_pfn_t     mfn;        /* INVLPG_LOCAL, INVLPG_ALL, SET_LDT */        unsigned long linear_addr;    } arg1;    union {        /* SET_LDT */        unsigned int nr_ents;        /* TLB_FLUSH_MULTI, INVLPG_MULTI */#if __XEN_INTERFACE_VERSION__ >= 0x00030205        XEN_GUEST_HANDLE(void) vcpumask;#else        void *vcpumask;#endif    } arg2;};typedef struct mmuext_op mmuext_op_t;DEFINE_XEN_GUEST_HANDLE(mmuext_op_t);#endif/* These are passed as 'flags' to update_va_mapping. They can be ORed. *//* When specifying UVMF_MULTI, also OR in a pointer to a CPU bitmap.   *//* UVMF_LOCAL is merely UVMF_MULTI with a NULL bitmap pointer.         */#define UVMF_NONE               (0UL<<0) /* No flushing at all.   */#define UVMF_TLB_FLUSH          (1UL<<0) /* Flush entire TLB(s).  */#define UVMF_INVLPG             (2UL<<0) /* Flush only one entry. */#define UVMF_FLUSHTYPE_MASK     (3UL<<0)#define UVMF_MULTI              (0UL<<2) /* Flush subset of TLBs. */#define UVMF_LOCAL              (0UL<<2) /* Flush local TLB.      */#define UVMF_ALL                (1UL<<2) /* Flush all TLBs.       *//* * Commands to HYPERVISOR_console_io(). */#define CONSOLEIO_write         0#define CONSOLEIO_read          1/* * Commands to HYPERVISOR_vm_assist(). */#define VMASST_CMD_enable                0#define VMASST_CMD_disable               1/* x86/32 guests: simulate full 4GB segment limits. */#define VMASST_TYPE_4gb_segments         0/* x86/32 guests: trap (vector 15) whenever above vmassist is used. */#define VMASST_TYPE_4gb_segments_notify  1/* * x86 guests: support writes to bottom-level PTEs. * NB1. Page-directory entries cannot be written. * NB2. Guest must continue to remove all writable mappings of PTEs. */#define VMASST_TYPE_writable_pagetables  2/* x86/PAE guests: support PDPTs above 4GB. */#define VMASST_TYPE_pae_extended_cr3     3#define MAX_VMASST_TYPE                  3#ifndef __ASSEMBLY__typedef uint16_t domid_t;/* Domain ids >= DOMID_FIRST_RESERVED cannot be used for ordinary domains. */

⌨️ 快捷键说明

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