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

📄 processor.h

📁 xen虚拟机源代码安装包
💻 H
📖 第 1 页 / 共 2 页
字号:
/* Portions are: Copyright (c) 1994 Linus Torvalds */#ifndef __ASM_X86_PROCESSOR_H#define __ASM_X86_PROCESSOR_H#ifndef __ASSEMBLY__#include <xen/config.h>#include <xen/cache.h>#include <xen/types.h>#include <xen/smp.h>#include <xen/percpu.h>#include <public/xen.h>#include <asm/types.h>#include <asm/cpufeature.h>#include <asm/desc.h>#endif/* * CPU vendor IDs */#define X86_VENDOR_INTEL 0#define X86_VENDOR_CYRIX 1#define X86_VENDOR_AMD 2#define X86_VENDOR_UMC 3#define X86_VENDOR_NEXGEN 4#define X86_VENDOR_CENTAUR 5#define X86_VENDOR_RISE 6#define X86_VENDOR_TRANSMETA 7#define X86_VENDOR_NSC 8#define X86_VENDOR_NUM 9#define X86_VENDOR_UNKNOWN 0xff/* * EFLAGS bits */#define X86_EFLAGS_CF	0x00000001 /* Carry Flag */#define X86_EFLAGS_PF	0x00000004 /* Parity Flag */#define X86_EFLAGS_AF	0x00000010 /* Auxillary carry Flag */#define X86_EFLAGS_ZF	0x00000040 /* Zero Flag */#define X86_EFLAGS_SF	0x00000080 /* Sign Flag */#define X86_EFLAGS_TF	0x00000100 /* Trap Flag */#define X86_EFLAGS_IF	0x00000200 /* Interrupt Flag */#define X86_EFLAGS_DF	0x00000400 /* Direction Flag */#define X86_EFLAGS_OF	0x00000800 /* Overflow Flag */#define X86_EFLAGS_IOPL	0x00003000 /* IOPL mask */#define X86_EFLAGS_NT	0x00004000 /* Nested Task */#define X86_EFLAGS_RF	0x00010000 /* Resume Flag */#define X86_EFLAGS_VM	0x00020000 /* Virtual Mode */#define X86_EFLAGS_AC	0x00040000 /* Alignment Check */#define X86_EFLAGS_VIF	0x00080000 /* Virtual Interrupt Flag */#define X86_EFLAGS_VIP	0x00100000 /* Virtual Interrupt Pending */#define X86_EFLAGS_ID	0x00200000 /* CPUID detection flag *//* * Intel CPU flags in CR0 */#define X86_CR0_PE              0x00000001 /* Enable Protected Mode    (RW) */#define X86_CR0_MP              0x00000002 /* Monitor Coprocessor      (RW) */#define X86_CR0_EM              0x00000004 /* Require FPU Emulation    (RO) */#define X86_CR0_TS              0x00000008 /* Task Switched            (RW) */#define X86_CR0_ET              0x00000010 /* Extension type           (RO) */#define X86_CR0_NE              0x00000020 /* Numeric Error Reporting  (RW) */#define X86_CR0_WP              0x00010000 /* Supervisor Write Protect (RW) */#define X86_CR0_AM              0x00040000 /* Alignment Checking       (RW) */#define X86_CR0_NW              0x20000000 /* Not Write-Through        (RW) */#define X86_CR0_CD              0x40000000 /* Cache Disable            (RW) */#define X86_CR0_PG              0x80000000 /* Paging                   (RW) *//* * Intel CPU features in CR4 */#define X86_CR4_VME		0x0001	/* enable vm86 extensions */#define X86_CR4_PVI		0x0002	/* virtual interrupts flag enable */#define X86_CR4_TSD		0x0004	/* disable time stamp at ipl 3 */#define X86_CR4_DE		0x0008	/* enable debugging extensions */#define X86_CR4_PSE		0x0010	/* enable page size extensions */#define X86_CR4_PAE		0x0020	/* enable physical address extensions */#define X86_CR4_MCE		0x0040	/* Machine check enable */#define X86_CR4_PGE		0x0080	/* enable global pages */#define X86_CR4_PCE		0x0100	/* enable performance counters at ipl 3 */#define X86_CR4_OSFXSR		0x0200	/* enable fast FPU save and restore */#define X86_CR4_OSXMMEXCPT	0x0400	/* enable unmasked SSE exceptions */#define X86_CR4_VMXE		0x2000  /* enable VMX */#define X86_CR4_SMXE		0x4000  /* enable SMX *//* * Trap/fault mnemonics. */#define TRAP_divide_error      0#define TRAP_debug             1#define TRAP_nmi               2#define TRAP_int3              3#define TRAP_overflow          4#define TRAP_bounds            5#define TRAP_invalid_op        6#define TRAP_no_device         7#define TRAP_double_fault      8#define TRAP_copro_seg         9#define TRAP_invalid_tss      10#define TRAP_no_segment       11#define TRAP_stack_error      12#define TRAP_gp_fault         13#define TRAP_page_fault       14#define TRAP_spurious_int     15#define TRAP_copro_error      16#define TRAP_alignment_check  17#define TRAP_machine_check    18#define TRAP_simd_error       19/* Set for entry via SYSCALL. Informs return code to use SYSRETQ not IRETQ. *//* NB. Same as VGCF_in_syscall. No bits in common with any other TRAP_ defn. */#define TRAP_syscall         256/* Boolean return code: the reason for a fault has been fixed. */#define EXCRET_fault_fixed 1/* 'trap_bounce' flags values */#define TBF_EXCEPTION          1#define TBF_EXCEPTION_ERRCODE  2#define TBF_INTERRUPT          8#define TBF_FAILSAFE          16/* 'arch_vcpu' flags values */#define _TF_kernel_mode        0#define TF_kernel_mode         (1<<_TF_kernel_mode)/* #PF error code values. */#define PFEC_page_present   (1U<<0)#define PFEC_write_access   (1U<<1)#define PFEC_user_mode      (1U<<2)#define PFEC_reserved_bit   (1U<<3)#define PFEC_insn_fetch     (1U<<4)#ifndef __ASSEMBLY__struct domain;struct vcpu;/* * Default implementation of macro that returns current * instruction pointer ("program counter"). */#ifdef __x86_64__#define current_text_addr() ({                      \    void *pc;                                       \    asm ( "leaq 1f(%%rip),%0\n1:" : "=r" (pc) );    \    pc;                                             \})#else#define current_text_addr() ({                  \    void *pc;                                   \    asm ( "movl $1f,%0\n1:" : "=g" (pc) );      \    pc;                                         \})#endifstruct cpuinfo_x86 {    __u8 x86;            /* CPU family */    __u8 x86_vendor;     /* CPU vendor */    __u8 x86_model;    __u8 x86_mask;    int  cpuid_level;    /* Maximum supported CPUID level, -1=no CPUID */    unsigned int x86_capability[NCAPINTS];    char x86_vendor_id[16];    char x86_model_id[64];    int  x86_cache_size; /* in KB - valid for CPUS which support this call  */    int  x86_cache_alignment;    /* In bytes */    int  x86_power;    __u32 x86_max_cores; /* cpuid returned max cores value */    __u32 booted_cores;  /* number of cores as seen by OS */    __u32 apicid;    unsigned short x86_clflush_size;} __cacheline_aligned;/* * capabilities of CPUs */extern struct cpuinfo_x86 boot_cpu_data;#ifdef CONFIG_SMPextern struct cpuinfo_x86 cpu_data[];#define current_cpu_data cpu_data[smp_processor_id()]#else#define cpu_data (&boot_cpu_data)#define current_cpu_data boot_cpu_data#endifextern int phys_proc_id[NR_CPUS];extern int cpu_core_id[NR_CPUS];extern void identify_cpu(struct cpuinfo_x86 *);extern void print_cpu_info(struct cpuinfo_x86 *);extern unsigned int init_intel_cacheinfo(struct cpuinfo_x86 *c);extern void dodgy_tsc(void);#ifdef CONFIG_X86_HTextern void detect_ht(struct cpuinfo_x86 *c);#elsestatic always_inline void detect_ht(struct cpuinfo_x86 *c) {}#endif/* * Generic CPUID function * clear %ecx since some cpus (Cyrix MII) do not set or clear %ecx * resulting in stale register contents being returned. */#define cpuid(_op,_eax,_ebx,_ecx,_edx)          \    asm ( "cpuid"                               \          : "=a" (*(int *)(_eax)),              \            "=b" (*(int *)(_ebx)),              \            "=c" (*(int *)(_ecx)),              \            "=d" (*(int *)(_edx))               \          : "0" (_op), "2" (0) )/* Some CPUID calls want 'count' to be placed in ecx */static inline void cpuid_count(    int op,    int count,    unsigned int *eax,    unsigned int *ebx,    unsigned int *ecx,    unsigned int *edx){    asm ( "cpuid"          : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)          : "0" (op), "c" (count) );}/* * CPUID functions returning a single datum */static always_inline unsigned int cpuid_eax(unsigned int op){    unsigned int eax;    asm ( "cpuid"          : "=a" (eax)          : "0" (op)          : "bx", "cx", "dx" );    return eax;}static always_inline unsigned int cpuid_ebx(unsigned int op){    unsigned int eax, ebx;    asm ( "cpuid"          : "=a" (eax), "=b" (ebx)          : "0" (op)          : "cx", "dx" );    return ebx;}static always_inline unsigned int cpuid_ecx(unsigned int op){    unsigned int eax, ecx;    asm ( "cpuid"          : "=a" (eax), "=c" (ecx)          : "0" (op)          : "bx", "dx" );    return ecx;}static always_inline unsigned int cpuid_edx(unsigned int op){    unsigned int eax, edx;    asm ( "cpuid"          : "=a" (eax), "=d" (edx)          : "0" (op)          : "bx", "cx" );    return edx;}static inline unsigned long read_cr0(void){    unsigned long cr0;    asm volatile ( "mov %%cr0,%0\n\t" : "=r" (cr0) );    return cr0;} static inline void write_cr0(unsigned long val){    asm volatile ( "mov %0,%%cr0" : : "r" ((unsigned long)val) );}static inline unsigned long read_cr2(void){    unsigned long cr2;    asm volatile ( "mov %%cr2,%0\n\t" : "=r" (cr2) );    return cr2;}DECLARE_PER_CPU(unsigned long, cr4);static inline unsigned long read_cr4(void){

⌨️ 快捷键说明

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