reactos/include/ndk/amd64/asm.h
Timo Kreuzer 9ea495ba33 Create a branch for header work.
svn path=/branches/header-work/; revision=45691
2010-02-26 22:57:55 +00:00

361 lines
11 KiB
C

/*++ NDK Version: 0095
Copyright (c) Timo Kreuzer. All rights reserved.
Header Name:
amd64/asm.h
Abstract:
ASM Offsets for dealing with de-referencing structures in registers.
Author:
Timo Kreuzer (timo.kreuzer@reactos.org) 06-Sep-2008
--*/
#ifndef _ASM_AMD64_H
#define _ASM_AMD64_H
#define SIZEOF_FX_SAVE_AREA 528 // HACK
//
// CPU Modes
//
#define KernelMode 0x0
#define UserMode 0x1
//
// CPU Types
//
#define CPU_INTEL 0x1
#define CPU_AMD 0x2
//
// KTSS Offsets
//
#define KTSS64_RSP0 0x04
#define KTSS64_RSP1 0x0c
#define KTSS64_RSP2 0x14
#define KTSS64_IST 0x1c
#define KTSS64_IO_MAP_BASE 0x66
//
// KTHREAD Offsets
//
#define KTHREAD_DEBUG_ACTIVE 0x03
#define KTHREAD_INITIAL_STACK 0x28
#define KTHREAD_STACK_LIMIT 0x30
#define KTHREAD_WAIT_IRQL 0x156
#define KTHREAD_TEB 0x0B0+0x10
#define KTHREAD_KERNEL_STACK 0x038
#define KTHREAD_NPX_STATE 0x85
#define KTHREAD_SERVICE_TABLE 0x1E8
#define KTHREAD_PREVIOUS_MODE 0x137
#define KTHREAD_TRAP_FRAME 0x1D8
#define KTHREAD_CALLBACK_STACK 0x1E0
#define KTHREAD_APCSTATE_PROCESS 0x068
#define KPROCESS_DIRECTORY_TABLE_BASE 0x028
//
// KPRCB Offsets
//
#define KPRCB_CurrentThread 0x08
//
// KPCR Offsets
//
#define KPCR_TSS_BASE 0x08
#define KPCR_SELF 0x18
#define KPCR_STALL_SCALE_FACTOR 0x64
#define KPCR_PRCB 0x180
//
// KTRAP_FRAME Offsets
//
#define KTRAP_FRAME_P1Home 0x00
#define KTRAP_FRAME_P2Home 0x08
#define KTRAP_FRAME_P3Home 0x10
#define KTRAP_FRAME_P4Home 0x18
#define KTRAP_FRAME_P5 0x20
#define KTRAP_FRAME_PreviousMode 0x28
#define KTRAP_FRAME_PreviousIrql 0x29
#define KTRAP_FRAME_FaultIndicator 0x2A
#define KTRAP_FRAME_ExceptionActive 0x2B
#define KTRAP_FRAME_MxCsr 0x2C
#define KTRAP_FRAME_Rax 0x30
#define KTRAP_FRAME_Rcx 0x38
#define KTRAP_FRAME_Rdx 0x40
#define KTRAP_FRAME_R8 0x48
#define KTRAP_FRAME_R9 0x50
#define KTRAP_FRAME_R10 0x58
#define KTRAP_FRAME_R11 0x60
#define KTRAP_FRAME_GsBase 0x68
#define KTRAP_FRAME_Xmm0 0x70
#define KTRAP_FRAME_Xmm1 0x80
#define KTRAP_FRAME_Xmm2 0x90
#define KTRAP_FRAME_Xmm3 0xA0
#define KTRAP_FRAME_Xmm4 0xB0
#define KTRAP_FRAME_Xmm5 0xC0
#define KTRAP_FRAME_FaultAddress 0xD0
#define KTRAP_FRAME_Dr0 0xD8
#define KTRAP_FRAME_Dr1 0xE0
#define KTRAP_FRAME_Dr2 0xE8
#define KTRAP_FRAME_Dr3 0xF0
#define KTRAP_FRAME_Dr6 0xF8
#define KTRAP_FRAME_Dr7 0x100
#define KTRAP_FRAME_DebugControl 0x108
#define KTRAP_FRAME_LastBranchToRip 0x110
#define KTRAP_FRAME_LastBranchFromRip 0x118
#define KTRAP_FRAME_LastExceptionToRip 0x120
#define KTRAP_FRAME_LastExceptionFromRip 0x128
#define KTRAP_FRAME_SegDs 0x130
#define KTRAP_FRAME_SegEs 0x132
#define KTRAP_FRAME_SegFs 0x134
#define KTRAP_FRAME_SegGs 0x136
#define KTRAP_FRAME_TrapFrame 0x138
#define KTRAP_FRAME_Rbx 0x140
#define KTRAP_FRAME_Rdi 0x148
#define KTRAP_FRAME_Rsi 0x150
#define KTRAP_FRAME_Rbp 0x158
#define KTRAP_FRAME_ErrorCode 0x160
#define KTRAP_FRAME_Rip 0x168
#define KTRAP_FRAME_SegCs 0x170
#define KTRAP_FRAME_Logging 0x173
#define KTRAP_FRAME_EFlags 0x178
#define KTRAP_FRAME_Rsp 0x180
#define KTRAP_FRAME_SegSs 0x188
#define KTRAP_FRAME_CodePatchCycle 0x18c
#define SIZE_KTRAP_FRAME 0x190
#define KTRAP_FRAME_ALIGN 0x10
#define KTRAP_FRAME_LENGTH 0x190
//
// CONTEXT Offsets
//
#define CONTEXT_P1Home 0
#define CONTEXT_P2Home 0x08
#define CONTEXT_P3Home 0x10
#define CONTEXT_P4Home 0x18
#define CONTEXT_P5Home 0x20
#define CONTEXT_P6Home 0x28
#define CONTEXT_ContextFlags 0x30
#define CONTEXT_MxCsr 0x34
#define CONTEXT_SegCs 0x38
#define CONTEXT_SegDs 0x3a
#define CONTEXT_SegEs 0x3c
#define CONTEXT_SegFs 0x3e
#define CONTEXT_SegGs 0x40
#define CONTEXT_SegSs 0x42
#define CONTEXT_EFlags 0x44
#define CONTEXT_Dr0 0x48
#define CONTEXT_Dr1 0x50
#define CONTEXT_Dr2 0x58
#define CONTEXT_Dr3 0x60
#define CONTEXT_Dr6 0x68
#define CONTEXT_Dr7 0x70
#define CONTEXT_Rax 0x78
#define CONTEXT_Rcx 0x80
#define CONTEXT_Rdx 0x88
#define CONTEXT_Rbx 0x90
#define CONTEXT_Rsp 0x98
#define CONTEXT_Rbp 0xa0
#define CONTEXT_Rsi 0xa8
#define CONTEXT_Rdi 0xb0
#define CONTEXT_R8 0xb8
#define CONTEXT_R9 0xc0
#define CONTEXT_R10 0xc8
#define CONTEXT_R11 0xd0
#define CONTEXT_R12 0xd8
#define CONTEXT_R13 0xe0
#define CONTEXT_R14 0xe8
#define CONTEXT_R15 0xf0
#define CONTEXT_Rip 0xf8
#define CONTEXT_Header 0x100
#define CONTEXT_Legacy 0x120
#define CONTEXT_Xmm0 0x1a0
#define CONTEXT_Xmm1 0x1b0
#define CONTEXT_Xmm2 0x1c0
#define CONTEXT_Xmm3 0x1d0
#define CONTEXT_Xmm4 0x1e0
#define CONTEXT_Xmm5 0x1f0
#define CONTEXT_Xmm6 0x200
#define CONTEXT_Xmm7 0x210
#define CONTEXT_Xmm8 0x220
#define CONTEXT_Xmm9 0x230
#define CONTEXT_Xmm10 0x240
#define CONTEXT_Xmm11 0x250
#define CONTEXT_Xmm12 0x260
#define CONTEXT_Xmm13 0x270
#define CONTEXT_Xmm14 0x280
#define CONTEXT_Xmm15 0x290
#define CONTEXT_VectorRegister 0x300
#define CONTEXT_VectorControl 0x4a0
#define CONTEXT_DebugControl 0x4a8
#define CONTEXT_LastBranchToRip 0x4b0
#define CONTEXT_LastBranchFromRip 0x4b8
#define CONTEXT_LastExceptionToRip 0x4c0
#define CONTEXT_LastExceptionFromRip 0x4c8
//
// EXCEPTION_RECORD Offsets
//
#define EXCEPTION_RECORD_ExceptionCode 0x00
#define EXCEPTION_RECORD_ExceptionFlags 0x04
#define EXCEPTION_RECORD_ExceptionRecord 0x08
#define EXCEPTION_RECORD_ExceptionAddress 0x10
#define EXCEPTION_RECORD_NumberParameters 0x18
#define EXCEPTION_RECORD_ExceptionInformation 0x20
#define SIZE_EXCEPTION_RECORD 0x98
//
// CR0
//
#define CR0_PE 0x1
#define CR0_MP 0x2
#define CR0_EM 0x4
#define CR0_TS 0x8
#define CR0_ET 0x10
#define CR0_NE 0x20
#define CR0_WP 0x10000
#define CR0_AM 0x40000
#define CR0_NW 0x20000000
#define CR0_CD 0x40000000
#define CR0_PG 0x80000000
//
// CR4
//
#define CR4_VME 0x1
#define CR4_PVI 0x2
#define CR4_TSD 0x4
#define CR4_DE 0x8
#define CR4_PSE 0x10
#define CR4_PAE 0x20
#define CR4_MCE 0x40
#define CR4_PGE 0x80
#define CR4_FXSR 0x200
#define CR4_XMMEXCPT 0x400
//
// Generic Definitions
//
#define PRIMARY_VECTOR_BASE 0x30
#define MAXIMUM_IDTVECTOR 0xFF
//
// Usermode callout frame definitions
//
#define CBSTACK_STACK 0x0
#define CBSTACK_TRAP_FRAME 0x8
#define CBSTACK_CALLBACK_STACK 0x10
#define CBSTACK_RBP 0x18
#define CBSTACK_RESULT 0x20
#define CBSTACK_RESULT_LENGTH 0x28
/* Following ones are ASM only! ***********************************************/
#ifdef __ASM__
//
// PCR Access
//
#define PCR gs:
//
// EFLAGS
//
#define EFLAGS_TF 0x100
#define EFLAGS_INTERRUPT_MASK 0x200
#define EFLAGS_NESTED_TASK 0x4000
#define EFLAGS_V86_MASK 0x20000
#define EFLAGS_ALIGN_CHECK 0x40000
#define EFLAGS_VIF 0x80000
#define EFLAGS_VIP 0x100000
#define EFLAG_SIGN 0x8000
#define EFLAG_ZERO 0x4000
#define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
#define EFLAGS_USER_SANITIZE 0x3F4DD7
//
// NTSTATUS and Bugcheck Codes
//
#define STATUS_ACCESS_VIOLATION 0xC0000005
#define STATUS_IN_PAGE_ERROR 0xC0000006
#define STATUS_GUARD_PAGE_VIOLATION 0x80000001
#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
#define STATUS_STACK_OVERFLOW 0xC00000FD
#define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004
#define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
#define STATUS_NO_CALLBACK_ACTIVE 0xC0000258
#define STATUS_CALLBACK_POP_STACK 0xC0000423
#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
#define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
#define STATUS_BREAKPOINT 0x80000003
#define STATUS_SINGLE_STEP 0x80000004
#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
#define STATUS_INTEGER_OVERFLOW 0xC0000095
#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
#define STATUS_FLOAT_OVERFLOW 0xC0000091
#define STATUS_FLOAT_STACK_CHECK 0xC0000092
#define STATUS_FLOAT_UNDERFLOW 0xC0000093
#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
#define APC_INDEX_MISMATCH 0x01
#define IRQL_NOT_GREATER_OR_EQUAL 0x09
#define IRQL_NOT_LESS_OR_EQUAL 0x0A
#define TRAP_CAUSE_UNKNOWN 0x12
#define KMODE_EXCEPTION_NOT_HANDLED 0x13
#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A
#define UNEXPECTED_KERNEL_MODE_TRAP 0x7F
#define ATTEMPTED_SWITCH_FROM_DPC 0xB8
#define HARDWARE_INTERRUPT_STORM 0xF2
//
// IRQL Levels
//
#define PASSIVE_LEVEL 0
#define LOW_LEVEL 0
#define APC_LEVEL 1
#define DISPATCH_LEVEL 2
#define CLOCK_LEVEL 13
#define IPI_LEVEL 14
#define POWER_LEVEL 14
#define PROFILE_LEVEL 15
#define HIGH_LEVEL 15
//
// Quantum Decrements
//
#define CLOCK_QUANTUM_DECREMENT 0x3
//
// Machine types
//
#define MACHINE_TYPE_ISA 0x0000
#define MACHINE_TYPE_EISA 0x0001
#define MACHINE_TYPE_MCA 0x0002
//
// Kernel Feature Bits
//
#define KF_RDTSC 0x00000002
//
// Kernel Stack Size
//
#define KERNEL_STACK_SIZE 0x6000
#endif // __ASM__
#endif // !_ASM_AMD64_H