Sync to trunk head(r38096)
[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 // KPRCB Offsets
55 //
56 #define KPRCB_CurrentThread 0x08
57
58
59 //
60 // KPCR Offsets
61 //
62 #define KPCR_TSS_BASE 0x08
63 #define KPCR_SELF 0x18
64 #define KPCR_STALL_SCALE_FACTOR 0x64
65 #define KPCR_PRCB 0x180
66
67 //
68 // KTRAP_FRAME Offsets
69 //
70 #define KTRAP_FRAME_P1Home 0x00
71 #define KTRAP_FRAME_P2Home 0x08
72 #define KTRAP_FRAME_P3Home 0x10
73 #define KTRAP_FRAME_P4Home 0x18
74 #define KTRAP_FRAME_P5 0x20
75 #define KTRAP_FRAME_PreviousMode 0x28
76 #define KTRAP_FRAME_PreviousIrql 0x29
77 #define KTRAP_FRAME_FaultIndicator 0x2A
78 #define KTRAP_FRAME_ExceptionActive 0x2B
79 #define KTRAP_FRAME_MxCsr 0x2C
80 #define KTRAP_FRAME_Rax 0x30
81 #define KTRAP_FRAME_Rcx 0x38
82 #define KTRAP_FRAME_Rdx 0x40
83 #define KTRAP_FRAME_R8 0x48
84 #define KTRAP_FRAME_R9 0x50
85 #define KTRAP_FRAME_R10 0x58
86 #define KTRAP_FRAME_R11 0x60
87 #define KTRAP_FRAME_GsBase 0x68
88 #define KTRAP_FRAME_Xmm0 0x70
89 #define KTRAP_FRAME_Xmm1 0x80
90 #define KTRAP_FRAME_Xmm2 0x90
91 #define KTRAP_FRAME_Xmm3 0xA0
92 #define KTRAP_FRAME_Xmm4 0xB0
93 #define KTRAP_FRAME_Xmm5 0xC0
94 #define KTRAP_FRAME_FaultAddress 0xD0
95 #define KTRAP_FRAME_Dr0 0xD8
96 #define KTRAP_FRAME_Dr1 0xE0
97 #define KTRAP_FRAME_Dr2 0xE8
98 #define KTRAP_FRAME_Dr3 0xF0
99 #define KTRAP_FRAME_Dr6 0xF8
100 #define KTRAP_FRAME_Dr7 0x100
101 #define KTRAP_FRAME_DebugControl 0x108
102 #define KTRAP_FRAME_LastBranchToRip 0x110
103 #define KTRAP_FRAME_LastBranchFromRip 0x118
104 #define KTRAP_FRAME_LastExceptionToRip 0x120
105 #define KTRAP_FRAME_LastExceptionFromRip 0x128
106 #define KTRAP_FRAME_SegDs 0x130
107 #define KTRAP_FRAME_SegEs 0x132
108 #define KTRAP_FRAME_SegFs 0x134
109 #define KTRAP_FRAME_SegGs 0x136
110 #define KTRAP_FRAME_TrapFrame 0x138
111 #define KTRAP_FRAME_Rbx 0x140
112 #define KTRAP_FRAME_Rdi 0x148
113 #define KTRAP_FRAME_Rsi 0x150
114 #define KTRAP_FRAME_Rbp 0x158
115 #define KTRAP_FRAME_ErrorCode 0x160
116 #define KTRAP_FRAME_Rip 0x168
117 #define KTRAP_FRAME_SegCs 0x170
118 #define KTRAP_FRAME_Logging 0x173
119 #define KTRAP_FRAME_EFlags 0x178
120 #define KTRAP_FRAME_Rsp 0x180
121 #define KTRAP_FRAME_SegSs 0x188
122 #define KTRAP_FRAME_CodePatchCycle 0x18c
123 #define SIZE_KTRAP_FRAME 0x190
124 #define KTRAP_FRAME_ALIGN 0x10
125 #define KTRAP_FRAME_LENGTH 0x190
126
127 //
128 // CONTEXT Offsets
129 //
130 #define CONTEXT_P1Home 0
131 #define CONTEXT_P2Home 0x08
132 #define CONTEXT_P3Home 0x10
133 #define CONTEXT_P4Home 0x18
134 #define CONTEXT_P5Home 0x20
135 #define CONTEXT_P6Home 0x28
136 #define CONTEXT_ContextFlags 0x30
137 #define CONTEXT_MxCsr 0x34
138 #define CONTEXT_SegCs 0x38
139 #define CONTEXT_SegDs 0x3a
140 #define CONTEXT_SegEs 0x3c
141 #define CONTEXT_SegFs 0x3e
142 #define CONTEXT_SegGs 0x40
143 #define CONTEXT_SegSs 0x42
144 #define CONTEXT_EFlags 0x44
145 #define CONTEXT_Dr0 0x48
146 #define CONTEXT_Dr1 0x50
147 #define CONTEXT_Dr2 0x58
148 #define CONTEXT_Dr3 0x60
149 #define CONTEXT_Dr6 0x68
150 #define CONTEXT_Dr7 0x70
151 #define CONTEXT_Rax 0x78
152 #define CONTEXT_Rcx 0x80
153 #define CONTEXT_Rdx 0x88
154 #define CONTEXT_Rbx 0x90
155 #define CONTEXT_Rsp 0x98
156 #define CONTEXT_Rbp 0xa0
157 #define CONTEXT_Rsi 0xa8
158 #define CONTEXT_Rdi 0xb0
159 #define CONTEXT_R8 0xb8
160 #define CONTEXT_R9 0xc0
161 #define CONTEXT_R10 0xc8
162 #define CONTEXT_R11 0xd0
163 #define CONTEXT_R12 0xd8
164 #define CONTEXT_R13 0xe0
165 #define CONTEXT_R14 0xe8
166 #define CONTEXT_R15 0xf0
167 #define CONTEXT_Rip 0xf8
168 #define CONTEXT_Header 0x100
169 #define CONTEXT_Legacy 0x120
170 #define CONTEXT_Xmm0 0x1a0
171 #define CONTEXT_Xmm1 0x1b0
172 #define CONTEXT_Xmm2 0x1c0
173 #define CONTEXT_Xmm3 0x1d0
174 #define CONTEXT_Xmm4 0x1e0
175 #define CONTEXT_Xmm5 0x1f0
176 #define CONTEXT_Xmm6 0x200
177 #define CONTEXT_Xmm7 0x210
178 #define CONTEXT_Xmm8 0x220
179 #define CONTEXT_Xmm9 0x230
180 #define CONTEXT_Xmm10 0x240
181 #define CONTEXT_Xmm11 0x250
182 #define CONTEXT_Xmm12 0x260
183 #define CONTEXT_Xmm13 0x270
184 #define CONTEXT_Xmm14 0x280
185 #define CONTEXT_Xmm15 0x290
186 #define CONTEXT_VectorRegister 0x300
187 #define CONTEXT_VectorControl 0x4a0
188 #define CONTEXT_DebugControl 0x4a8
189 #define CONTEXT_LastBranchToRip 0x4b0
190 #define CONTEXT_LastBranchFromRip 0x4b8
191 #define CONTEXT_LastExceptionToRip 0x4c0
192 #define CONTEXT_LastExceptionFromRip 0x4c8
193
194 //
195 // EXCEPTION_RECORD Offsets
196 //
197 #define EXCEPTION_RECORD_ExceptionCode 0x00
198 #define EXCEPTION_RECORD_ExceptionFlags 0x04
199 #define EXCEPTION_RECORD_ExceptionRecord 0x08
200 #define EXCEPTION_RECORD_ExceptionAddress 0x10
201 #define EXCEPTION_RECORD_NumberParameters 0x18
202 #define EXCEPTION_RECORD_ExceptionInformation 0x20
203 #define SIZE_EXCEPTION_RECORD 0x98
204
205 //
206 // CR0
207 //
208 #define CR0_PE 0x1
209 #define CR0_MP 0x2
210 #define CR0_EM 0x4
211 #define CR0_TS 0x8
212 #define CR0_ET 0x10
213 #define CR0_NE 0x20
214 #define CR0_WP 0x10000
215 #define CR0_AM 0x40000
216 #define CR0_NW 0x20000000
217 #define CR0_CD 0x40000000
218 #define CR0_PG 0x80000000
219
220 //
221 // CR4
222 //
223 #define CR4_VME 0x1
224 #define CR4_PVI 0x2
225 #define CR4_TSD 0x4
226 #define CR4_DE 0x8
227 #define CR4_PSE 0x10
228 #define CR4_PAE 0x20
229 #define CR4_MCE 0x40
230 #define CR4_PGE 0x80
231 #define CR4_FXSR 0x200
232 #define CR4_XMMEXCPT 0x400
233
234 //
235 // Generic Definitions
236 //
237 #define PRIMARY_VECTOR_BASE 0x30
238 #define MAXIMUM_IDTVECTOR 0xFF
239
240 //
241 // Usermode callout frame definitions
242 //
243 #define CBSTACK_STACK 0x0
244 #define CBSTACK_TRAP_FRAME 0x8
245 #define CBSTACK_CALLBACK_STACK 0x10
246 #define CBSTACK_RBP 0x18
247 #define CBSTACK_RESULT 0x20
248 #define CBSTACK_RESULT_LENGTH 0x28
249
250
251 /* Following ones are ASM only! ***********************************************/
252
253 #ifdef __ASM__
254
255 //
256 // PCR Access
257 //
258 #define PCR gs:
259
260 //
261 // EFLAGS
262 //
263 #define EFLAGS_TF 0x100
264 #define EFLAGS_INTERRUPT_MASK 0x200
265 #define EFLAGS_NESTED_TASK 0x4000
266 #define EFLAGS_V86_MASK 0x20000
267 #define EFLAGS_ALIGN_CHECK 0x40000
268 #define EFLAGS_VIF 0x80000
269 #define EFLAGS_VIP 0x100000
270 #define EFLAG_SIGN 0x8000
271 #define EFLAG_ZERO 0x4000
272 #define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
273 #define EFLAGS_USER_SANITIZE 0x3F4DD7
274
275 //
276 // NTSTATUS and Bugcheck Codes
277 //
278 #define STATUS_ACCESS_VIOLATION 0xC0000005
279 #define STATUS_IN_PAGE_ERROR 0xC0000006
280 #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
281 #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
282 #define STATUS_STACK_OVERFLOW 0xC00000FD
283 #define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004
284 #define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
285 #define STATUS_NO_CALLBACK_ACTIVE 0xC0000258
286 #define STATUS_CALLBACK_POP_STACK 0xC0000423
287 #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
288 #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
289 #define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
290 #define STATUS_BREAKPOINT 0x80000003
291 #define STATUS_SINGLE_STEP 0x80000004
292 #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
293 #define STATUS_INTEGER_OVERFLOW 0xC0000095
294 #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
295 #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
296 #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
297 #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
298 #define STATUS_FLOAT_OVERFLOW 0xC0000091
299 #define STATUS_FLOAT_STACK_CHECK 0xC0000092
300 #define STATUS_FLOAT_UNDERFLOW 0xC0000093
301 #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
302 #define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
303 #define APC_INDEX_MISMATCH 0x01
304 #define IRQL_NOT_GREATER_OR_EQUAL 0x09
305 #define IRQL_NOT_LESS_OR_EQUAL 0x0A
306 #define TRAP_CAUSE_UNKNOWN 0x12
307 #define KMODE_EXCEPTION_NOT_HANDLED 0x13
308 #define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A
309 #define UNEXPECTED_KERNEL_MODE_TRAP 0x7F
310 #define ATTEMPTED_SWITCH_FROM_DPC 0xB8
311 #define HARDWARE_INTERRUPT_STORM 0xF2
312
313 //
314 // IRQL Levels
315 //
316 #define PASSIVE_LEVEL 0
317 #define LOW_LEVEL 0
318 #define APC_LEVEL 1
319 #define DISPATCH_LEVEL 2
320 #define CLOCK_LEVEL 13
321 #define IPI_LEVEL 14
322 #define POWER_LEVEL 14
323 #define PROFILE_LEVEL 15
324 #define HIGH_LEVEL 15
325
326 //
327 // Quantum Decrements
328 //
329 #define CLOCK_QUANTUM_DECREMENT 0x3
330
331 //
332 // Machine types
333 //
334 #define MACHINE_TYPE_ISA 0x0000
335 #define MACHINE_TYPE_EISA 0x0001
336 #define MACHINE_TYPE_MCA 0x0002
337
338 //
339 // Kernel Feature Bits
340 //
341 #define KF_RDTSC 0x00000002
342
343 //
344 // Kernel Stack Size
345 //
346 #define KERNEL_STACK_SIZE 0x6000
347
348 #endif // __ASM__
349
350 #endif // !_ASM_AMD64_H
351