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

📄 machine.h

📁 xen 3.2.2 源码
💻 H
字号:
/* * machine.h: Intel CPU specific definitions * * 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 __MACHINE_H__#define __MACHINE_H__/* the size of our stack (4KB) */#define STACK_SIZE	8192#define TSS_SELECTOR	0x08#define CODE_SELECTOR	0x10#define DATA_SELECTOR	0x18#define CR0_PE		(1 << 0)#define CR0_EM		(1 << 2)#define	CR0_TS		(1 << 3)#define CR0_NE		(1 << 5)#define CR0_PG		(1 << 31)#define CR4_VME		(1 << 0)#define CR4_PVI		(1 << 1)#define CR4_PSE		(1 << 4)#define CR4_PAE		(1 << 5)#define EFLAGS_CF	(1 << 0)#define EFLAGS_PF	(1 << 2)#define EFLAGS_AF	(1 << 4)#define EFLAGS_ZF	(1 << 6)#define EFLAGS_SF	(1 << 7)#define EFLAGS_TF	(1 << 8)#define EFLAGS_IF	(1 << 9)#define EFLAGS_DF	(1 << 10)#define EFLAGS_OF	(1 << 11)#define EFLAGS_IOPL	(3 << 12)#define EFLAGS_VM	((1 << 17) | EFLAGS_IOPL)#define EFLAGS_VIF	(1 << 19)#define EFLAGS_VIP	(1 << 20)#define	LOG_PGSIZE	12	/* log2(page size) */#define	LOG_PDSIZE	22	/* log2(page directory size) *//* Derived constants */#define	PGSIZE		(1 << LOG_PGSIZE)	/* page size */#define	PGMASK		(~(PGSIZE - 1))		/* page mask */#define	LPGSIZE		(1 << LOG_PDSIZE)	/* large page size */#define	LPGMASK		(~(LPGSIZE - 1))	/* large page mask *//* Programmable Interrupt Contoller (PIC) defines */#define	PIC_MASTER	0x20#define	PIC_SLAVE	0xA0#define	PIC_CMD		0	/* command */#define	PIC_ISR		0	/* interrupt status */#define	PIC_IMR		1	/* interrupt mask */#ifndef __ASSEMBLY__struct dtr {	unsigned short	size;	unsigned long	base __attribute__ ((packed));};struct tss {	unsigned short	prev_link;	unsigned short	_1;	unsigned long	esp0;	unsigned short	ss0;	unsigned short	_2;	unsigned long	esp1;	unsigned short	ss1;	unsigned short	_3;	unsigned long	esp2;	unsigned short	ss2;	unsigned short	_4;	unsigned long	cr3;	unsigned long	eip;	unsigned long	eflags;	unsigned long	eax;	unsigned long	ecx;	unsigned long	edx;	unsigned long	ebx;	unsigned long	esi;	unsigned long	edi;	unsigned long	esp;	unsigned long	ebp;	unsigned long	es;	unsigned long	cs;	unsigned long	ss;	unsigned long	ds;	unsigned long	fs;	unsigned long	gs;	unsigned short	ldt_segment;	unsigned short	_5;	unsigned short	_6;	unsigned short	iomap_base;#ifdef	ENABLE_VME	unsigned long	int_redir[8];#endif	unsigned char	iomap[8193];};static inline voidoutw(unsigned short addr, unsigned short val){	__asm__ __volatile__ ("outw %%ax, %%dx" :: "d"(addr), "a"(val));}static inline voidoutb(unsigned short addr, unsigned char val){	__asm__ __volatile__ ("outb %%al, %%dx" :: "d"(addr), "a"(val));}static inline unsigned charinb(unsigned short addr){	unsigned char val;	__asm__ __volatile__ ("inb %w1,%0" : "=a" (val) : "Nd" (addr));	return val;}static inline unsignedget_cmos(int reg){	outb(0x70, reg);	return inb(0x71);}static inline unsignedget_cr0(void){        unsigned rv;        __asm__ __volatile__("movl %%cr0, %0" : "=r"(rv));        return rv;}static inline voidset_cr0(unsigned value){	__asm__ __volatile__(		"movl	%0, %%cr0\n"		"jmp	1f\n"		"1: 	nop\n"		: /* no outputs */		: "r"(value)	);}static inline unsignedget_cr2(void){	unsigned rv;	__asm__ __volatile__("movl %%cr2, %0" : "=r"(rv));	return rv;}static inline unsignedget_cr4(void){        unsigned rv;        __asm__ __volatile__("movl %%cr4, %0" : "=r"(rv));        return rv;}static inline voidset_cr3(unsigned addr){        __asm__ __volatile__("movl %0, %%cr3" : /* no outputs */ : "r"(addr));}static inline voidset_cr4(unsigned value){	__asm__ __volatile__("movl %0, %%cr4" : /* no outputs */ : "r"(value));}#endif /* __ASSEMBLY__ */#endif /* __MACHINE_H__ */

⌨️ 快捷键说明

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