Add KTRAP_FRAME offsets to asm.h
[reactos.git] / reactos / include / ndk / amd64 / asm.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Timo Kreuzer. All rights reserved.
4
5 Header Name:
6
7 amd64/asm.h
8
9 Abstract:
10
11 ASM Offsets for dealing with de-referencing structures in registers.
12
13 Author:
14
15 Timo Kreuzer (timo.kreuzer@reactos.org) 06-Sep-2008
16
17 --*/
18 #ifndef _ASM_AMD64_H
19 #define _ASM_AMD64_H
20
21
22 #define SIZEOF_FX_SAVE_AREA 528 // HACK
23
24 //
25 // CPU Modes
26 //
27 #define KernelMode 0x0
28 #define UserMode 0x1
29
30 //
31 // CPU Types
32 //
33 #define CPU_INTEL 0x1
34 #define CPU_AMD 0x2
35
36 //
37 // KTSS Offsets
38 //
39 #define KTSS64_RSP0 0x04
40 #define KTSS64_RSP1 0x0c
41 #define KTSS64_RSP2 0x14
42 #define KTSS64_IST 0x1c
43 #define KTSS64_IO_MAP_BASE 0x66
44
45 //
46 // KTHREAD Offsets
47 //
48 #define KTHREAD_DEBUG_ACTIVE 0x03
49 #define KTHREAD_INITIAL_STACK 0x28
50 #define KTHREAD_STACK_LIMIT 0x30
51 #define KTHREAD_WAIT_IRQL 0x156
52
53
54 //
55 // KPCR Offsets
56 //
57 #define KPCR_TSS_BASE 0x08
58 #define KPCR_SELF 0x18
59 #define KPCR_STALL_SCALE_FACTOR 0x64
60
61 //
62 // Trap Frame Offsets
63 //
64 #define KTRAP_FRAME_ALIGN 0x10
65 #define KTRAP_FRAME_LENGTH 0x190
66
67 //
68 // CONTEXT Offsets
69 //
70 #define CONTEXT_P1Home 0
71 #define CONTEXT_P2Home 0x08
72 #define CONTEXT_P3Home 0x10
73 #define CONTEXT_P4Home 0x18
74 #define CONTEXT_P5Home 0x20
75 #define CONTEXT_P6Home 0x28
76 #define CONTEXT_ContextFlags 0x30
77 #define CONTEXT_MxCsr 0x34
78 #define CONTEXT_SegCs 0x38
79 #define CONTEXT_SegDs 0x3a
80 #define CONTEXT_SegEs 0x3c
81 #define CONTEXT_SegFs 0x3e
82 #define CONTEXT_SegGs 0x40
83 #define CONTEXT_SegSs 0x42
84 #define CONTEXT_EFlags 0x44
85 #define CONTEXT_Dr0 0x48
86 #define CONTEXT_Dr1 0x50
87 #define CONTEXT_Dr2 0x58
88 #define CONTEXT_Dr3 0x60
89 #define CONTEXT_Dr6 0x68
90 #define CONTEXT_Dr7 0x70
91 #define CONTEXT_Rax 0x78
92 #define CONTEXT_Rcx 0x80
93 #define CONTEXT_Rdx 0x88
94 #define CONTEXT_Rbx 0x90
95 #define CONTEXT_Rsp 0x98
96 #define CONTEXT_Rbp 0xa0
97 #define CONTEXT_Rsi 0xa8
98 #define CONTEXT_Rdi 0xb0
99 #define CONTEXT_R8 0xb8
100 #define CONTEXT_R9 0xc0
101 #define CONTEXT_R10 0xc8
102 #define CONTEXT_R11 0xd0
103 #define CONTEXT_R12 0xd8
104 #define CONTEXT_R13 0xe0
105 #define CONTEXT_R14 0xe8
106 #define CONTEXT_R15 0xf0
107 #define CONTEXT_Rip 0xf8
108 #define CONTEXT_Header 0x100
109 #define CONTEXT_Legacy 0x120
110 #define CONTEXT_Xmm0 0x1a0
111 #define CONTEXT_Xmm1 0x1b0
112 #define CONTEXT_Xmm2 0x1c0
113 #define CONTEXT_Xmm3 0x1d0
114 #define CONTEXT_Xmm4 0x1e0
115 #define CONTEXT_Xmm5 0x1f0
116 #define CONTEXT_Xmm6 0x200
117 #define CONTEXT_Xmm7 0x210
118 #define CONTEXT_Xmm8 0x220
119 #define CONTEXT_Xmm9 0x230
120 #define CONTEXT_Xmm10 0x240
121 #define CONTEXT_Xmm11 0x250
122 #define CONTEXT_Xmm12 0x260
123 #define CONTEXT_Xmm13 0x270
124 #define CONTEXT_Xmm14 0x280
125 #define CONTEXT_Xmm15 0x290
126 #define CONTEXT_VectorRegister 0x300
127 #define CONTEXT_VectorControl 0x4a0
128 #define CONTEXT_DebugControl 0x4a8
129 #define CONTEXT_LastBranchToRip 0x4b0
130 #define CONTEXT_LastBranchFromRip 0x4b8
131 #define CONTEXT_LastExceptionToRip 0x4c0
132 #define CONTEXT_LastExceptionFromRip 0x4c8
133
134 //
135 // KTRAP_FRAME Offsets
136 //
137 #define KTRAP_FRAME_P1Home 0x00
138 #define KTRAP_FRAME_P2Home 0x08
139 #define KTRAP_FRAME_P3Home 0x10
140 #define KTRAP_FRAME_P4Home 0x18
141 #define KTRAP_FRAME_P5 0x20
142 #define KTRAP_FRAME_PreviousMode 0x28
143 #define KTRAP_FRAME_PreviousIrql 0x29
144 #define KTRAP_FRAME_FaultIndicator 0x2A
145 #define KTRAP_FRAME_ExceptionActive 0x2B
146 #define KTRAP_FRAME_MxCsr 0x2C
147 #define KTRAP_FRAME_Rax 0x30
148 #define KTRAP_FRAME_Rcx 0x38
149 #define KTRAP_FRAME_Rdx 0x40
150 #define KTRAP_FRAME_R8 0x48
151 #define KTRAP_FRAME_R9 0x50
152 #define KTRAP_FRAME_R10 0x58
153 #define KTRAP_FRAME_R11 0x60
154 #define KTRAP_FRAME_Spare0 0x68
155 #define KTRAP_FRAME_Xmm0 0x70
156 #define KTRAP_FRAME_Xmm1 0x80
157 #define KTRAP_FRAME_Xmm2 0x90
158 #define KTRAP_FRAME_Xmm3 0xA0
159 #define KTRAP_FRAME_Xmm4 0xB0
160 #define KTRAP_FRAME_Xmm5 0xC0
161 #define KTRAP_FRAME_FaultAddress 0xD0
162 #define KTRAP_FRAME_Dr0 0xD8
163 #define KTRAP_FRAME_Dr1 0xE0
164 #define KTRAP_FRAME_Dr2 0xE8
165 #define KTRAP_FRAME_Dr3 0xF0
166 #define KTRAP_FRAME_Dr6 0xF8
167 #define KTRAP_FRAME_Dr7 0x100
168 #define KTRAP_FRAME_DebugControl 0x108
169 #define KTRAP_FRAME_LastBranchToRip 0x110
170 #define KTRAP_FRAME_LastBranchFromRip 0x118
171 #define KTRAP_FRAME_LastExceptionToRip 0x120
172 #define KTRAP_FRAME_LastExceptionFromRip 0x128
173 #define KTRAP_FRAME_SegDs 0x130
174 #define KTRAP_FRAME_SegEs 0x132
175 #define KTRAP_FRAME_SegFs 0x134
176 #define KTRAP_FRAME_SegGs 0x136
177 #define KTRAP_FRAME_TrapFrame 0x138
178 #define KTRAP_FRAME_Rbx 0x140
179 #define KTRAP_FRAME_Rdi 0x148
180 #define KTRAP_FRAME_Rsi 0x150
181 #define KTRAP_FRAME_Rbp 0x158
182 #define KTRAP_FRAME_ErrorCode 0x160
183 #define KTRAP_FRAME_Rip 0x168
184 #define KTRAP_FRAME_SegCs 0x170
185 #define KTRAP_FRAME_EFlags 0x178
186 #define KTRAP_FRAME_Rsp 0x180
187 #define KTRAP_FRAME_SegSs 0x188
188 #define SIZE_KTRAP_FRAME 0x190
189
190 //
191 // CR0
192 //
193 #define CR0_PE 0x1
194 #define CR0_MP 0x2
195 #define CR0_EM 0x4
196 #define CR0_TS 0x8
197 #define CR0_ET 0x10
198 #define CR0_NE 0x20
199 #define CR0_WP 0x10000
200 #define CR0_AM 0x40000
201 #define CR0_NW 0x20000000
202 #define CR0_CD 0x40000000
203 #define CR0_PG 0x80000000
204
205 //
206 // Generic Definitions
207 //
208 #define PRIMARY_VECTOR_BASE 0x30
209 #define MAXIMUM_IDTVECTOR 0xFF
210
211
212 /* Following ones are ASM only! ***********************************************/
213
214 #ifdef __ASM__
215
216 //
217 // PCR Access
218 //
219 #define PCR gs:
220
221 //
222 // EFLAGS
223 //
224 #define EFLAGS_TF 0x100
225 #define EFLAGS_INTERRUPT_MASK 0x200
226 #define EFLAGS_NESTED_TASK 0x4000
227 #define EFLAGS_V86_MASK 0x20000
228 #define EFLAGS_ALIGN_CHECK 0x40000
229 #define EFLAGS_VIF 0x80000
230 #define EFLAGS_VIP 0x100000
231 #define EFLAG_SIGN 0x8000
232 #define EFLAG_ZERO 0x4000
233 #define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
234 #define EFLAGS_USER_SANITIZE 0x3F4DD7
235
236
237 //
238 // IRQL Levels
239 //
240 #define PASSIVE_LEVEL 0
241 #define LOW_LEVEL 0
242 #define APC_LEVEL 1
243 #define DISPATCH_LEVEL 2
244 #define CLOCK_LEVEL 13
245 #define IPI_LEVEL 14
246 #define POWER_LEVEL 14
247 #define PROFILE_LEVEL 15
248 #define HIGH_LEVEL 15
249
250 //
251 // Quantum Decrements
252 //
253 #define CLOCK_QUANTUM_DECREMENT 0x3
254
255 //
256 // Machine types
257 //
258 #define MACHINE_TYPE_ISA 0x0000
259 #define MACHINE_TYPE_EISA 0x0001
260 #define MACHINE_TYPE_MCA 0x0002
261
262 //
263 // Kernel Feature Bits
264 //
265 #define KF_RDTSC 0x00000002
266
267 //
268 // Kernel Stack Size
269 //
270 #define KERNEL_STACK_SIZE 0x6000
271
272 #endif // __ASM__
273
274 #endif // !_ASM_AMD64_H
275