add CBSTACK constants, need to check for correctness
[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_Spare0 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_EFlags 0x178
119 #define KTRAP_FRAME_Rsp 0x180
120 #define KTRAP_FRAME_SegSs 0x188
121 #define SIZE_KTRAP_FRAME 0x190
122 #define KTRAP_FRAME_ALIGN 0x10
123 #define KTRAP_FRAME_LENGTH 0x190
124
125 //
126 // CONTEXT Offsets
127 //
128 #define CONTEXT_P1Home 0
129 #define CONTEXT_P2Home 0x08
130 #define CONTEXT_P3Home 0x10
131 #define CONTEXT_P4Home 0x18
132 #define CONTEXT_P5Home 0x20
133 #define CONTEXT_P6Home 0x28
134 #define CONTEXT_ContextFlags 0x30
135 #define CONTEXT_MxCsr 0x34
136 #define CONTEXT_SegCs 0x38
137 #define CONTEXT_SegDs 0x3a
138 #define CONTEXT_SegEs 0x3c
139 #define CONTEXT_SegFs 0x3e
140 #define CONTEXT_SegGs 0x40
141 #define CONTEXT_SegSs 0x42
142 #define CONTEXT_EFlags 0x44
143 #define CONTEXT_Dr0 0x48
144 #define CONTEXT_Dr1 0x50
145 #define CONTEXT_Dr2 0x58
146 #define CONTEXT_Dr3 0x60
147 #define CONTEXT_Dr6 0x68
148 #define CONTEXT_Dr7 0x70
149 #define CONTEXT_Rax 0x78
150 #define CONTEXT_Rcx 0x80
151 #define CONTEXT_Rdx 0x88
152 #define CONTEXT_Rbx 0x90
153 #define CONTEXT_Rsp 0x98
154 #define CONTEXT_Rbp 0xa0
155 #define CONTEXT_Rsi 0xa8
156 #define CONTEXT_Rdi 0xb0
157 #define CONTEXT_R8 0xb8
158 #define CONTEXT_R9 0xc0
159 #define CONTEXT_R10 0xc8
160 #define CONTEXT_R11 0xd0
161 #define CONTEXT_R12 0xd8
162 #define CONTEXT_R13 0xe0
163 #define CONTEXT_R14 0xe8
164 #define CONTEXT_R15 0xf0
165 #define CONTEXT_Rip 0xf8
166 #define CONTEXT_Header 0x100
167 #define CONTEXT_Legacy 0x120
168 #define CONTEXT_Xmm0 0x1a0
169 #define CONTEXT_Xmm1 0x1b0
170 #define CONTEXT_Xmm2 0x1c0
171 #define CONTEXT_Xmm3 0x1d0
172 #define CONTEXT_Xmm4 0x1e0
173 #define CONTEXT_Xmm5 0x1f0
174 #define CONTEXT_Xmm6 0x200
175 #define CONTEXT_Xmm7 0x210
176 #define CONTEXT_Xmm8 0x220
177 #define CONTEXT_Xmm9 0x230
178 #define CONTEXT_Xmm10 0x240
179 #define CONTEXT_Xmm11 0x250
180 #define CONTEXT_Xmm12 0x260
181 #define CONTEXT_Xmm13 0x270
182 #define CONTEXT_Xmm14 0x280
183 #define CONTEXT_Xmm15 0x290
184 #define CONTEXT_VectorRegister 0x300
185 #define CONTEXT_VectorControl 0x4a0
186 #define CONTEXT_DebugControl 0x4a8
187 #define CONTEXT_LastBranchToRip 0x4b0
188 #define CONTEXT_LastBranchFromRip 0x4b8
189 #define CONTEXT_LastExceptionToRip 0x4c0
190 #define CONTEXT_LastExceptionFromRip 0x4c8
191
192 //
193 // EXCEPTION_RECORD Offsets
194 //
195 #define EXCEPTION_RECORD_ExceptionCode 0x00
196 #define EXCEPTION_RECORD_ExceptionFlags 0x04
197 #define EXCEPTION_RECORD_ExceptionRecord 0x08
198 #define EXCEPTION_RECORD_ExceptionAddress 0x10
199 #define EXCEPTION_RECORD_NumberParameters 0x18
200 #define EXCEPTION_RECORD_ExceptionInformation 0x20
201 #define SIZE_EXCEPTION_RECORD 0x98
202
203 //
204 // CR0
205 //
206 #define CR0_PE 0x1
207 #define CR0_MP 0x2
208 #define CR0_EM 0x4
209 #define CR0_TS 0x8
210 #define CR0_ET 0x10
211 #define CR0_NE 0x20
212 #define CR0_WP 0x10000
213 #define CR0_AM 0x40000
214 #define CR0_NW 0x20000000
215 #define CR0_CD 0x40000000
216 #define CR0_PG 0x80000000
217
218 //
219 // CR4
220 //
221 #define CR4_VME 0x1
222 #define CR4_PVI 0x2
223 #define CR4_TSD 0x4
224 #define CR4_DE 0x8
225 #define CR4_PSE 0x10
226 #define CR4_PAE 0x20
227 #define CR4_MCE 0x40
228 #define CR4_PGE 0x80
229 #define CR4_FXSR 0x200
230 #define CR4_XMMEXCPT 0x400
231
232 //
233 // Generic Definitions
234 //
235 #define PRIMARY_VECTOR_BASE 0x30
236 #define MAXIMUM_IDTVECTOR 0xFF
237
238 //
239 // Usermode callout frame definitions
240 //
241 #define CBSTACK_STACK 0x0
242 #define CBSTACK_TRAP_FRAME 0x8
243 #define CBSTACK_CALLBACK_STACK 0x10
244 #define CBSTACK_RBP 0x18
245 #define CBSTACK_RESULT 0x20
246 #define CBSTACK_RESULT_LENGTH 0x28
247
248
249 /* Following ones are ASM only! ***********************************************/
250
251 #ifdef __ASM__
252
253 //
254 // PCR Access
255 //
256 #define PCR gs:
257
258 //
259 // EFLAGS
260 //
261 #define EFLAGS_TF 0x100
262 #define EFLAGS_INTERRUPT_MASK 0x200
263 #define EFLAGS_NESTED_TASK 0x4000
264 #define EFLAGS_V86_MASK 0x20000
265 #define EFLAGS_ALIGN_CHECK 0x40000
266 #define EFLAGS_VIF 0x80000
267 #define EFLAGS_VIP 0x100000
268 #define EFLAG_SIGN 0x8000
269 #define EFLAG_ZERO 0x4000
270 #define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
271 #define EFLAGS_USER_SANITIZE 0x3F4DD7
272
273 //
274 // NTSTATUS and Bugcheck Codes
275 //
276 #define STATUS_ACCESS_VIOLATION 0xC0000005
277 #define STATUS_IN_PAGE_ERROR 0xC0000006
278 #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
279 #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
280 #define STATUS_STACK_OVERFLOW 0xC00000FD
281 #define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004
282 #define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
283 #define STATUS_NO_CALLBACK_ACTIVE 0xC0000258
284 #define STATUS_CALLBACK_POP_STACK 0xC0000423
285 #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
286 #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
287 #define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
288 #define STATUS_BREAKPOINT 0x80000003
289 #define STATUS_SINGLE_STEP 0x80000004
290 #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
291 #define STATUS_INTEGER_OVERFLOW 0xC0000095
292 #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
293 #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
294 #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
295 #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
296 #define STATUS_FLOAT_OVERFLOW 0xC0000091
297 #define STATUS_FLOAT_STACK_CHECK 0xC0000092
298 #define STATUS_FLOAT_UNDERFLOW 0xC0000093
299 #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
300 #define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
301 #define APC_INDEX_MISMATCH 0x01
302 #define IRQL_NOT_GREATER_OR_EQUAL 0x09
303 #define IRQL_NOT_LESS_OR_EQUAL 0x0A
304 #define TRAP_CAUSE_UNKNOWN 0x12
305 #define KMODE_EXCEPTION_NOT_HANDLED 0x13
306 #define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A
307 #define UNEXPECTED_KERNEL_MODE_TRAP 0x7F
308 #define ATTEMPTED_SWITCH_FROM_DPC 0xB8
309 #define HARDWARE_INTERRUPT_STORM 0xF2
310
311 //
312 // IRQL Levels
313 //
314 #define PASSIVE_LEVEL 0
315 #define LOW_LEVEL 0
316 #define APC_LEVEL 1
317 #define DISPATCH_LEVEL 2
318 #define CLOCK_LEVEL 13
319 #define IPI_LEVEL 14
320 #define POWER_LEVEL 14
321 #define PROFILE_LEVEL 15
322 #define HIGH_LEVEL 15
323
324 //
325 // Quantum Decrements
326 //
327 #define CLOCK_QUANTUM_DECREMENT 0x3
328
329 //
330 // Machine types
331 //
332 #define MACHINE_TYPE_ISA 0x0000
333 #define MACHINE_TYPE_EISA 0x0001
334 #define MACHINE_TYPE_MCA 0x0002
335
336 //
337 // Kernel Feature Bits
338 //
339 #define KF_RDTSC 0x00000002
340
341 //
342 // Kernel Stack Size
343 //
344 #define KERNEL_STACK_SIZE 0x6000
345
346 #endif // __ASM__
347
348 #endif // !_ASM_AMD64_H
349