privop.h

来自「xen虚拟机源代码安装包」· C头文件 代码 · 共 98 行

H
98
字号
/* * Copyright (C) 2005 Hewlett-Packard Co *	Dan Magenheimer <dan.magenheimer@hp.com> * * Paravirtualizations of privileged operations for Xen/ia64 * */#ifndef _PRIVOP_H_#define _PRIVOP_H_#include <xen/arch-ia64.h>#define IA64_PARAVIRTUALIZED/* At 1 MB, before per-cpu space but still addressable using addl instead   of movl. */#define XSI_BASE		0xfffffffffff00000/* Address of mapped regs.  */#define XMAPPEDREGS_BASE	(XSI_BASE + XSI_SIZE)#ifdef __ASSEMBLY__#define	XEN_HYPER_RFI		break HYPERPRIVOP_RFI#define	XEN_HYPER_RSM_PSR_DT	break HYPERPRIVOP_RSM_DT#define	XEN_HYPER_SSM_PSR_DT	break HYPERPRIVOP_SSM_DT#define	XEN_HYPER_COVER		break HYPERPRIVOP_COVER#define	XEN_HYPER_ITC_D		break HYPERPRIVOP_ITC_D#define	XEN_HYPER_ITC_I		break HYPERPRIVOP_ITC_I#define	XEN_HYPER_SSM_I		break HYPERPRIVOP_SSM_I#define	XEN_HYPER_GET_IVR	break HYPERPRIVOP_GET_IVR#define	XEN_HYPER_GET_TPR	break HYPERPRIVOP_GET_TPR#define	XEN_HYPER_SET_TPR	break HYPERPRIVOP_SET_TPR#define	XEN_HYPER_EOI		break HYPERPRIVOP_EOI#define	XEN_HYPER_SET_ITM	break HYPERPRIVOP_SET_ITM#define	XEN_HYPER_THASH		break HYPERPRIVOP_THASH#define	XEN_HYPER_PTC_GA	break HYPERPRIVOP_PTC_GA#define	XEN_HYPER_ITR_D		break HYPERPRIVOP_ITR_D#define	XEN_HYPER_GET_RR	break HYPERPRIVOP_GET_RR#define	XEN_HYPER_SET_RR	break HYPERPRIVOP_SET_RR#define	XEN_HYPER_SET_KR	break HYPERPRIVOP_SET_KR#define	XEN_HYPER_FC		break HYPERPRIVOP_FC#define	XEN_HYPER_GET_CPUID	break HYPERPRIVOP_GET_CPUID#define	XEN_HYPER_GET_PMD	break HYPERPRIVOP_GET_PMD#define	XEN_HYPER_GET_EFLAG	break HYPERPRIVOP_GET_EFLAG#define	XEN_HYPER_SET_EFLAG	break HYPERPRIVOP_SET_EFLAG#define	XEN_HYPER_RSM_BE	break HYPERPRIVOP_RSM_BE#define	XEN_HYPER_GET_PSR	break HYPERPRIVOP_GET_PSR#define XSI_IFS			(XSI_BASE + XSI_IFS_OFS)#define XSI_PRECOVER_IFS	(XSI_BASE + XSI_PRECOVER_IFS_OFS)#define XSI_INCOMPL_REGFR	(XSI_BASE + XSI_INCOMPL_REGFR_OFS)#define XSI_IFA			(XSI_BASE + XSI_IFA_OFS)#define XSI_ISR			(XSI_BASE + XSI_ISR_OFS)#define XSI_IIM			(XSI_BASE + XSI_IIM_OFS)#define XSI_ITIR		(XSI_BASE + XSI_ITIR_OFS)#define XSI_PSR_I_ADDR		(XSI_BASE + XSI_PSR_I_ADDR_OFS)#define XSI_PSR_IC		(XSI_BASE + XSI_PSR_IC_OFS)#define XSI_IPSR		(XSI_BASE + XSI_IPSR_OFS)#define XSI_IIP			(XSI_BASE + XSI_IIP_OFS)#define XSI_BANK1_R16		(XSI_BASE + XSI_BANK1_R16_OFS)#define XSI_BANKNUM		(XSI_BASE + XSI_BANKNUM_OFS)#define XSI_IHA			(XSI_BASE + XSI_IHA_OFS)#endif#ifndef __ASSEMBLY__#define	XEN_HYPER_SSM_I		asm("break %0" : : "i" (HYPERPRIVOP_SSM_I))#define	XEN_HYPER_GET_IVR	asm("break %0" : : "i" (HYPERPRIVOP_GET_IVR))/************************************************//* Instructions paravirtualized for performance *//************************************************//* Xen uses memory-mapped virtual privileged registers for access to many * performance-sensitive privileged registers.  Some, like the processor * status register (psr), are broken up into multiple memory locations. * Others, like "pend", are abstractions based on privileged registers. * "Pend" is guaranteed to be set if reading cr.ivr would return a * (non-spurious) interrupt. */#define XEN_MAPPEDREGS ((struct mapped_regs *)XMAPPEDREGS_BASE)#define XSI_PSR_I			\	(*XEN_MAPPEDREGS->interrupt_mask_addr)#define xen_get_virtual_psr_i()		\	(!XSI_PSR_I)#define xen_set_virtual_psr_i(_val)	\	({ XSI_PSR_I = (uint8_t)(_val) ? 0 : 1; })#define xen_get_virtual_psr_ic()	\	( XEN_MAPPEDREGS->interrupt_collection_enabled )#define xen_set_virtual_psr_ic(_val)	\	({ XEN_MAPPEDREGS->interrupt_collection_enabled = _val ? 1 : 0; })#define xen_get_virtual_pend()		(XEN_MAPPEDREGS->pending_interruption)#endif /* __ASSEMBLY__ */#endif /* _PRIVOP_H_ */

⌨️ 快捷键说明

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