x86.h revision 5476bd9ec30ebad9ed9e39aa8a4ff2c49bede2d7
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * X86 (and AMD64) Structures and Definitions.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Copyright (C) 2006-2007 innotek GmbH
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * This file is part of VirtualBox Open Source Edition (OSE), as
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * available from http://www.virtualbox.org. This file is free software;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * you can redistribute it and/or modify it under the terms of the GNU
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * General Public License (GPL) as published by the Free Software
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Foundation, in version 2 as it comes in the "COPYING" file of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * The contents of this file may alternatively be used under the terms
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * of the Common Development and Distribution License Version 1.0
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * VirtualBox OSE distribution, in which case the provisions of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL are applicable instead of those of the GPL.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You may elect to license modified versions of this file under the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * terms and conditions of either the GPL or the CDDL or both.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * x86.mac is generated from this file using:
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * sed -e '/__VBox_x86_h__/d' -e '/#define/!d' -e 's/#define/%define/' include/VBox/x86.h
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/* Workaround for Solaris sys/regset.h defining CS, DS */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** @defgroup grp_x86 x86 Types and Definitions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * EFLAGS Bits.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 0 - CF - Carry flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 1 - 1 - Reserved flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 2 - PF - Parity flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 3 - 0 - Reserved flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 4 - AF - Auxiliary carry flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 5 - 0 - Reserved flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 6 - ZF - Zero flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 7 - SF - Signed flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 8 - TF - Trap flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 9 - IF - Interrupt flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 10 - DF - Direction flag - Control flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 11 - OF - Overflow flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 12-13 - IOPL - I/O prvilege level flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 14 - NT - Nested task flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 15 - 0 - Reserved flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 16 - RF - Resume flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 17 - VM - Virtual 8086 mode - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 18 - AC - Alignment check flag - System flag. Works with CR0.AM. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 19 - VIF - Virtual interupt flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 20 - VIP - Virtual interupt pending flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 21 - ID - CPUID flag - System flag. If this responds to flipping CPUID is supported. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 22-31 - 0 - Reserved flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to EFLAGS bits. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to const EFLAGS bits. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef const X86EFLAGSBITS *PCX86EFLAGSBITS;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The bitfield view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 8-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 16-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 32-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 32-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The plain unsigned view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to EFLAGS. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to const EFLAGS. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * RFLAGS (32 upper bits are reserved).
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The bitfield view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 8-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 16-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 32-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 64-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The 64-bit view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** The plain unsigned view. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to RFLAGS. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to const RFLAGS. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** @name EFLAGS
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 0 - CF - Carry flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 2 - PF - Parity flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 4 - AF - Auxiliary carry flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 6 - ZF - Zero flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 7 - SF - Signed flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 8 - TF - Trap flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 9 - IF - Interrupt flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 10 - DF - Direction flag - Control flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 11 - OF - Overflow flag - Status flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 12-13 - IOPL - I/O prvilege level flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_EFL_IOPL (RT_BIT(12) | RT_BIT(13))
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 14 - NT - Nested task flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 16 - RF - Resume flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 17 - VM - Virtual 8086 mode - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 18 - AC - Alignment check flag - System flag. Works with CR0.AM. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 19 - VIF - Virtual interupt flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 20 - VIP - Virtual interupt pending flag - System flag. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Bit 21 - ID - CPUID flag - System flag. If this responds to flipping CPUID is supported. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** IOPL shift. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** The the IOPL level from the flags. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_EFL_GET_IOPL(efl) (((efl) >> X86_EFL_IOPL_SHIFT) & 3)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** CPUID Feature information - ECX.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CPUID query with EAX=1.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 0 - SSE3 - Supports SSE3 or not. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 3 - MONITOR - Supports MONITOR/MWAIT. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 4 - CPL-DS - CPL Qualified Debug Store. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 5 - VMX - Virtual Machine Technology. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 7 - EST - Enh. SpeedStep Tech. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 8 - TM2 - Terminal Monitor 2. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 9 - SSSE3 - Supplemental Streaming SIMD Extensions 3. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 10 - CNTX-ID - L1 Context ID. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 13 - CX16 - CMPXCHG16B. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 14 - xTPR Update Control. Processor supports changing IA32_MISC_ENABLES[bit 23]. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to CPUID Feature Information - ECX. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to const CPUID Feature Information - ECX. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef const X86CPUIDFEATECX *PCX86CPUIDFEATECX;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** CPUID Feature Information - EDX.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CPUID query with EAX=1.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 0 - FPU - x87 FPU on Chip. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 1 - VME - Virtual 8086 Mode Enhancements. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 2 - DE - Debugging extensions. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 3 - PSE - Page Size Extension. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 4 - TSC - Time Stamp Counter. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 5 - MSR - Model Specific Registers RDMSR and WRMSR Instructions. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 6 - PAE - Physical Address Extension. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 7 - MCE - Machine Check Exception. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 8 - CX8 - CMPXCHG8B instruction. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 9 - APIC - APIC On-Chick. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 10 - Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 11 - SEP - SYSENTER and SYSEXIT. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 12 - MTRR - Memory Type Range Registers. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 13 - PGE - PTE Global Bit. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 14 - MCA - Machine Check Architecture. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 15 - CMOV - Conditional Move Instructions. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 16 - PAT - Page Attribute Table. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 17 - PSE-36 - 36-bit Page Size Extention. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 18 - PSN - Processor Serial Number. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 19 - CLFSH - CLFLUSH Instruction. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 20 - Reserved. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 21 - DS - Debug Store. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 22 - ACPI - Thermal Monitor and Software Controlled Clock Facilities. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 23 - MMX - Intel MMX 'Technology'. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 24 - FXSR - FXSAVE and FXRSTOR Instructions. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 25 - SSE - SSE Support. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 26 - SSE2 - SSE2 Support. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 27 - SS - Self Snoop. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 28 - HTT - Hyper-Threading Technology. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 29 - TM - Thermal Monitor. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 30 - Reserved - . */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland /** Bit 31 - PBE - Pending Break Enabled. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to CPUID Feature Information - EDX. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** Pointer to const CPUID Feature Information - EDX. */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef const X86CPUIDFEATEDX *PCX86CPUIDFEATEDX;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/** @name CPUID Vendor information.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CPUID query with EAX=0.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_INTEL_EBX 0x756e6547 /* Genu */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_INTEL_ECX 0x6c65746e /* ntel */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_INTEL_EDX 0x49656e69 /* ineI */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_AMD_EBX 0x68747541 /* Auth */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_AMD_ECX 0x444d4163 /* cAMD */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define X86_CPUID_VENDOR_AMD_EDX 0x69746e65 /* enti */
#define X86_DR7_RW_EO 0
#define X86_DR7_LEN_BYTE 0
#define X86_DR7_ENABLED_MASK (RT_BIT(0) | RT_BIT(1) | RT_BIT(2) | RT_BIT(3) | RT_BIT(4) | RT_BIT(6) | RT_BIT(7))
/** K6 PFIR - Page Flush/Invalidate Register. */
typedef struct X86PTEBITS
} X86PTEBITS;
typedef union X86PTE
X86PTEBITS n;
X86PGUINT u;
} X86PTE;
typedef struct X86PTEPAEBITS
typedef union X86PTEPAE
X86PGPAEUINT u;
} X86PTEPAE;
typedef struct X86PT
} X86PT;
typedef struct X86PTPAE
} X86PTPAE;
typedef struct X86PDEBITS
} X86PDEBITS;
typedef struct X86PDEPAEBITS
/** Bits 21-51 - - PAE & AMD64 - Physical Page number. (bits 40-51 (long mode) & bits 36-51 (pae legacy) are reserved according to the Intel docs; AMD allows for more) */
typedef struct X86PDE4MBITS
} X86PDE4MBITS;
typedef struct X86PDE2MPAEBITS
typedef union X86PDE
X86PDEBITS n;
X86PDE4MBITS b;
X86PGUINT u;
} X86PDE;
typedef union X86PDEPAE
X86PGPAEUINT u;
} X86PDEPAE;
typedef struct X86PD
} X86PD;
typedef struct X86PDPAE
} X86PDPAE;
typedef struct X86PDPEBITS
} X86PDPEBITS;
typedef union X86PDPE
X86PDPEBITS n;
X86PGPAEUINT u;
} X86PDPE;
typedef struct X86PDPTR
} X86PDPTR;
typedef struct X86PML4EBITS
} X86PML4EBITS;
typedef union X86PML4E
X86PML4EBITS n;
X86PGPAEUINT u;
} X86PML4E;
typedef struct X86PML4
} X86PML4;
typedef struct X86FPUMMX
} X86FPUMMX;
typedef struct X86FPUSTATE
} X86FPUSTATE;
#pragma pack()
typedef struct X86FXSTATE
} X86FXSTATE;
#pragma pack()
typedef struct X86DESCGENERIC
#pragma pack()
typedef struct X86DESCATTRBITS
typedef union X86DESCATTR
uint32_t u;
} X86DESCATTR;
#pragma pack()
typedef union X86DESC
} X86DESC;
#pragma pack()
typedef struct X86DESC64GENERIC
#pragma pack()
typedef struct X86DESC64SYSTEM
#pragma pack()
typedef union X86DESC64
} X86DESC64;
#pragma pack()
#define X86_SEL_TYPE_RO 0
#define X86_SEL_TYPE_SYS_UNDEFINED 0
* x86 Exceptions/Faults/Traps.
typedef enum X86XCPT
} X86XCPT;
typedef struct X86XDTR32
#pragma pack()
typedef struct X86XDTR64
#pragma pack()