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

📄 arch-ia64.h

📁 xen虚拟机源代码安装包
💻 H
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * arch-ia64/hypervisor-if.h *  * Guest OS interface to IA64 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. * */#include "xen.h"#ifndef __HYPERVISOR_IF_IA64_H__#define __HYPERVISOR_IF_IA64_H__#if !defined(__GNUC__) || defined(__STRICT_ANSI__)#error "Anonymous structs/unions are a GNU extension."#endif/* Structural guest handles introduced in 0x00030201. */#if __XEN_INTERFACE_VERSION__ >= 0x00030201#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \    typedef struct { type *p; } __guest_handle_ ## name#else#define ___DEFINE_XEN_GUEST_HANDLE(name, type) \    typedef type * __guest_handle_ ## name#endif#define __DEFINE_XEN_GUEST_HANDLE(name, type) \    ___DEFINE_XEN_GUEST_HANDLE(name, type);   \    ___DEFINE_XEN_GUEST_HANDLE(const_##name, const type)#define DEFINE_XEN_GUEST_HANDLE(name)   __DEFINE_XEN_GUEST_HANDLE(name, name)#define XEN_GUEST_HANDLE(name)          __guest_handle_ ## name#define XEN_GUEST_HANDLE_64(name)       XEN_GUEST_HANDLE(name)#define uint64_aligned_t                uint64_t#define set_xen_guest_handle(hnd, val)  do { (hnd).p = val; } while (0)#ifdef __XEN_TOOLS__#define get_xen_guest_handle(val, hnd)  do { val = (hnd).p; } while (0)#endif#ifndef __ASSEMBLY__typedef unsigned long xen_pfn_t;#define PRI_xen_pfn "lx"#endif/* Arch specific VIRQs definition */#define VIRQ_ITC        VIRQ_ARCH_0 /* V. Virtual itc timer */#define VIRQ_MCA_CMC    VIRQ_ARCH_1 /* MCA cmc interrupt */#define VIRQ_MCA_CPE    VIRQ_ARCH_2 /* MCA cpe interrupt *//* Maximum number of virtual CPUs in multi-processor guests. *//* WARNING: before changing this, check that shared_info fits on a page */#define MAX_VIRT_CPUS 64/* IO ports location for PV.  */#define IO_PORTS_PADDR          0x00000ffffc000000UL#define IO_PORTS_SIZE           0x0000000004000000UL#ifndef __ASSEMBLY__typedef unsigned long xen_ulong_t;#ifdef __XEN_TOOLS__#define XEN_PAGE_SIZE XC_PAGE_SIZE#else#define XEN_PAGE_SIZE PAGE_SIZE#endif#define INVALID_MFN       (~0UL)struct pt_fpreg {    union {        unsigned long bits[2];        long double __dummy;    /* force 16-byte alignment */    } u;};union vac {    unsigned long value;    struct {        int a_int:1;        int a_from_int_cr:1;        int a_to_int_cr:1;        int a_from_psr:1;        int a_from_cpuid:1;        int a_cover:1;        int a_bsw:1;        long reserved:57;    };};typedef union vac vac_t;union vdc {    unsigned long value;    struct {        int d_vmsw:1;        int d_extint:1;        int d_ibr_dbr:1;        int d_pmc:1;        int d_to_pmd:1;        int d_itm:1;        long reserved:58;    };};typedef union vdc vdc_t;struct mapped_regs {    union vac   vac;    union vdc   vdc;    unsigned long  virt_env_vaddr;    unsigned long  reserved1[29];    unsigned long  vhpi;    unsigned long  reserved2[95];    union {        unsigned long  vgr[16];        unsigned long bank1_regs[16]; // bank1 regs (r16-r31) when bank0 active    };    union {        unsigned long  vbgr[16];        unsigned long bank0_regs[16]; // bank0 regs (r16-r31) when bank1 active    };    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;  // CR0            unsigned long itm;            unsigned long iva;            unsigned long rsv1[5];            unsigned long pta;  // CR8            unsigned long rsv2[7];            unsigned long ipsr;  // CR16            unsigned long isr;            unsigned long rsv3;            unsigned long iip;            unsigned long ifa;            unsigned long itir;            unsigned long iipa;            unsigned long ifs;            unsigned long iim;  // CR24            unsigned long iha;            unsigned long rsv4[38];            unsigned long lid;  // CR64            unsigned long ivr;            unsigned long tpr;            unsigned long eoi;            unsigned long irr[4];            unsigned long itv;  // CR72            unsigned long pmv;            unsigned long cmcv;            unsigned long rsv5[5];            unsigned long lrr0;  // CR80            unsigned long lrr1;            unsigned long rsv6[46];        };    };    union {        unsigned long  reserved5[128];        struct {            unsigned long precover_ifs;            unsigned long unat;  // not sure if this is needed until NaT arch is done            int interrupt_collection_enabled; // virtual psr.ic            /* virtual interrupt deliverable flag is evtchn_upcall_mask in             * shared info area now. interrupt_mask_addr is the address             * of evtchn_upcall_mask for current vcpu             */            unsigned char *interrupt_mask_addr;            int pending_interruption;            unsigned char vpsr_pp;            unsigned char vpsr_dfh;            unsigned char hpsr_dfh;            unsigned char hpsr_mfh;            unsigned long reserved5_1[4];            int metaphysical_mode; // 1 = use metaphys mapping, 0 = use virtual            int banknum; // 0 or 1, which virtual register bank is active            unsigned long rrs[8]; // region registers            unsigned long krs[8]; // kernel registers            unsigned long tmp[16]; // temp registers (e.g. for hyperprivops)        };    };};typedef struct mapped_regs mapped_regs_t;struct vpd {    struct mapped_regs vpd_low;    unsigned long  reserved6[3456];    unsigned long  vmm_avail[128];    unsigned long  reserved7[4096];};typedef struct vpd vpd_t;struct arch_vcpu_info {};typedef struct arch_vcpu_info arch_vcpu_info_t;/* * This structure is used for magic page in domain pseudo physical address * space and the result of XENMEM_machine_memory_map. * As the XENMEM_machine_memory_map result, * xen_memory_map::nr_entries indicates the size in bytes  * including struct xen_ia64_memmap_info. Not the number of entries. */struct xen_ia64_memmap_info {    uint64_t efi_memmap_size;       /* size of EFI memory map */    uint64_t efi_memdesc_size;      /* size of an EFI memory map descriptor */    uint32_t efi_memdesc_version;   /* memory descriptor version */    void *memdesc[0];               /* array of efi_memory_desc_t */};typedef struct xen_ia64_memmap_info xen_ia64_memmap_info_t;struct arch_shared_info {    /* PFN of the start_info page.  */    unsigned long start_info_pfn;    /* Interrupt vector for event channel.  */    int evtchn_vector;    /* PFN of memmap_info page */    unsigned int memmap_info_num_pages;/* currently only = 1 case is                                          supported. */    unsigned long memmap_info_pfn;    uint64_t pad[31];};typedef struct arch_shared_info arch_shared_info_t;typedef unsigned long xen_callback_t;struct ia64_tr_entry {    unsigned long pte;    unsigned long itir;    unsigned long vadr;    unsigned long rid;};typedef struct ia64_tr_entry ia64_tr_entry_t;DEFINE_XEN_GUEST_HANDLE(ia64_tr_entry_t);struct vcpu_tr_regs {    struct ia64_tr_entry itrs[12];    struct ia64_tr_entry dtrs[12];};union vcpu_ar_regs {    unsigned long ar[128];    struct {        unsigned long kr[8];        unsigned long rsv1[8];        unsigned long rsc;        unsigned long bsp;        unsigned long bspstore;        unsigned long rnat;        unsigned long rsv2;        unsigned long fcr;        unsigned long rsv3[2];        unsigned long eflag;        unsigned long csd;        unsigned long ssd;        unsigned long cflg;        unsigned long fsr;        unsigned long fir;        unsigned long fdr;        unsigned long rsv4;        unsigned long ccv; /* 32 */        unsigned long rsv5[3];        unsigned long unat;        unsigned long rsv6[3];        unsigned long fpsr;        unsigned long rsv7[3];        unsigned long itc;        unsigned long rsv8[3];        unsigned long ign1[16];        unsigned long pfs; /* 64 */        unsigned long lc;        unsigned long ec;        unsigned long rsv9[45];        unsigned long ign2[16];    };};union vcpu_cr_regs {    unsigned long cr[128];    struct {        unsigned long dcr;  // CR0        unsigned long itm;        unsigned long iva;        unsigned long rsv1[5];        unsigned long pta;  // CR8        unsigned long rsv2[7];        unsigned long ipsr;  // CR16

⌨️ 快捷键说明

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