📄 arch-ia64.h
字号:
/****************************************************************************** * 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 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__/* Guest handles for primitive C types. */__DEFINE_XEN_GUEST_HANDLE(uchar, unsigned char);__DEFINE_XEN_GUEST_HANDLE(uint, unsigned int);__DEFINE_XEN_GUEST_HANDLE(ulong, unsigned long);__DEFINE_XEN_GUEST_HANDLE(u64, unsigned long);DEFINE_XEN_GUEST_HANDLE(char);DEFINE_XEN_GUEST_HANDLE(int);DEFINE_XEN_GUEST_HANDLE(long);DEFINE_XEN_GUEST_HANDLE(void);typedef unsigned long xen_pfn_t;DEFINE_XEN_GUEST_HANDLE(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#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)#define MEM_G (1UL << 30)#define MEM_M (1UL << 20)#define MEM_K (1UL << 10)/* Guest physical address of IO ports space. */#define IO_PORTS_PADDR 0x00000ffffc000000UL#define IO_PORTS_SIZE 0x0000000004000000UL#define MMIO_START (3 * MEM_G)#define MMIO_SIZE (512 * MEM_M)#define VGA_IO_START 0xA0000UL#define VGA_IO_SIZE 0x20000#define LEGACY_IO_START (MMIO_START + MMIO_SIZE)#define LEGACY_IO_SIZE (64*MEM_M)#define IO_PAGE_START (LEGACY_IO_START + LEGACY_IO_SIZE)#define IO_PAGE_SIZE XEN_PAGE_SIZE#define STORE_PAGE_START (IO_PAGE_START + IO_PAGE_SIZE)#define STORE_PAGE_SIZE XEN_PAGE_SIZE#define BUFFER_IO_PAGE_START (STORE_PAGE_START + STORE_PAGE_SIZE)#define BUFFER_IO_PAGE_SIZE XEN_PAGE_SIZE#define BUFFER_PIO_PAGE_START (BUFFER_IO_PAGE_START + BUFFER_IO_PAGE_SIZE)#define BUFFER_PIO_PAGE_SIZE XEN_PAGE_SIZE#define IO_SAPIC_START 0xfec00000UL#define IO_SAPIC_SIZE 0x100000#define PIB_START 0xfee00000UL#define PIB_SIZE 0x200000#define GFW_START (4*MEM_G -16*MEM_M)#define GFW_SIZE (16*MEM_M)/* Nvram belongs to GFW memory space */#define NVRAM_SIZE (MEM_K * 64)#define NVRAM_START (GFW_START + 10 * MEM_M)#define NVRAM_VALID_SIG 0x4650494e45584948 // "HIXENIPF"struct nvram_save_addr { unsigned long addr; unsigned long signature;};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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -