move from branch
[reactos.git] / reactos / include / ndk / asm.h
1 /*++ NDK Version: 0095
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 asm.h
8
9 Abstract:
10
11 ASM Offsets for dealing with de-referencing structures in registers.
12 C-compatible version of the file ks386.inc present in the newest WDK.
13
14 Author:
15
16 Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
17
18 --*/
19
20 #ifndef _ASM_H
21 #define _ASM_H
22
23 #define NEW_SCHEDULER
24
25 //
26 // PCR Access
27 //
28 #ifdef __ASM__
29 #ifdef CONFIG_SMP
30 #define PCR fs:
31 #else
32 #define PCR ds:[0xFF000000]
33 #endif
34 #endif
35
36 //
37 // CPU Modes
38 //
39 #define KernelMode 0x0
40 #define UserMode 0x1
41
42 //
43 // CPU Types
44 //
45 #define CPU_INTEL 0x1
46 #define CPU_AMD 0x2
47
48 //
49 // Selector Names
50 //
51 #ifdef __ASM__
52 #define RPL_MASK 0x0003
53 #define MODE_MASK 0x0001
54 #define KGDT_R0_CODE (0x8)
55 #define KGDT_R0_DATA (0x10)
56 #define KGDT_R3_CODE (0x18)
57 #define KGDT_R3_DATA (0x20)
58 #define KGDT_TSS (0x28)
59 #define KGDT_R0_PCR (0x30)
60 #define KGDT_R3_TEB (0x38)
61 #define KGDT_LDT (0x48)
62 #define KGDT_DF_TSS (0x50)
63 #define KGDT_NMI_TSS (0x58)
64 #endif
65
66 //
67 // KV86M_REGISTERS Offsets
68 //
69 #define KV86M_REGISTERS_EBP 0x0
70 #define KV86M_REGISTERS_EDI 0x4
71 #define KV86M_REGISTERS_ESI 0x8
72 #define KV86M_REGISTERS_EDX 0xC
73 #define KV86M_REGISTERS_ECX 0x10
74 #define KV86M_REGISTERS_EBX 0x14
75 #define KV86M_REGISTERS_EAX 0x18
76 #define KV86M_REGISTERS_DS 0x1C
77 #define KV86M_REGISTERS_ES 0x20
78 #define KV86M_REGISTERS_FS 0x24
79 #define KV86M_REGISTERS_GS 0x28
80 #define KV86M_REGISTERS_EIP 0x2C
81 #define KV86M_REGISTERS_CS 0x30
82 #define KV86M_REGISTERS_EFLAGS 0x34
83 #define KV86M_REGISTERS_ESP 0x38
84 #define KV86M_REGISTERS_SS 0x3C
85 #define TF_SAVED_EXCEPTION_STACK 0x8C
86 #define TF_REGS 0x90
87 #define TF_ORIG_EBP 0x94
88
89 //
90 // TSS Offsets
91 //
92 #define KTSS_ESP0 0x4
93 #define KTSS_CR3 0x1C
94 #define KTSS_EFLAGS 0x24
95 #define KTSS_IOMAPBASE 0x66
96 #define KTSS_IO_MAPS 0x68
97
98 //
99 // KTHREAD Offsets
100 //
101 #define KTHREAD_DEBUG_ACTIVE 0x03
102 #define KTHREAD_INITIAL_STACK 0x18
103 #define KTHREAD_STACK_LIMIT 0x1C
104 #define KTHREAD_TEB 0x74
105 #define KTHREAD_KERNEL_STACK 0x20
106 #define KTHREAD_ALERTED 0x5E
107 #define KTHREAD_APCSTATE_PROCESS 0x28 + 0x10
108 #define KTHREAD_PENDING_USER_APC 0x28 + 0x16
109 #define KTHREAD_PENDING_KERNEL_APC 0x28 + 0x15
110 #define KTHREAD_CONTEXT_SWITCHES 0x48
111 #define KTHREAD_STATE 0x4C
112 #define KTHREAD_NPX_STATE 0x4D
113 #define KTHREAD_WAIT_IRQL 0x4E
114 #define KTHREAD_NEXT_PROCESSOR 0x40
115 #define KTHREAD_WAIT_REASON 0x5A
116 #define KTHREAD_SWAP_BUSY 0x5D
117 #define KTHREAD_SERVICE_TABLE 0x118
118 #define KTHREAD_PREVIOUS_MODE 0xD7
119 #define KTHREAD_COMBINED_APC_DISABLE 0x70
120 #define KTHREAD_SPECIAL_APC_DISABLE 0x72
121 #define KTHREAD_LARGE_STACK 0x107
122 #define KTHREAD_TRAP_FRAME 0x110
123 #define KTHREAD_CALLBACK_STACK 0x114
124 #define KTHREAD_APC_STATE_INDEX 0x11C
125 #define KTHREAD_STACK_BASE 0x158
126 #define KTHREAD_QUANTUM 0x15D
127 #define KTHREAD_KERNEL_TIME 0x160
128 #define KTHREAD_USER_TIME 0x18C
129
130 //
131 // KPROCESS Offsets
132 //
133 #define KPROCESS_DIRECTORY_TABLE_BASE 0x18
134 #define KPROCESS_LDT_DESCRIPTOR0 0x20
135 #define KPROCESS_LDT_DESCRIPTOR1 0x24
136 #define KPROCESS_INT21_DESCRIPTOR0 0x28
137 #define KPROCESS_INT21_DESCRIPTOR1 0x2C
138 #define KPROCESS_IOPM_OFFSET 0x30
139 #define KPROCESS_ACTIVE_PROCESSORS 0x34
140 #define EPROCESS_VDM_OBJECTS 0x144
141
142 //
143 // KTIMER_TABLE Offsets
144 //
145 #ifdef __ASM__
146 #define KTIMER_TABLE_ENTRY 0x00
147 #define KTIMER_TABLE_TIME 0x08
148 #define TIMER_ENTRY_SIZE 0x10
149 #define TIMER_TABLE_SIZE 0x200
150 #endif
151
152 //
153 // KPRCB Offsets
154 //
155 #define KPRCB_DR0 0x2F8
156 #define KPRCB_DR1 0x2FC
157 #define KPRCB_DR2 0x300
158 #define KPRCB_DR3 0x304
159 #define KPRCB_DR6 0x308
160 #define KPRCB_DR7 0x20C
161 #define KPRCB_TIMER_HAND 0x964
162 #define KPRCB_TIMER_REQUEST 0x968
163
164 //
165 // KPCR Offsets
166 //
167 #define KPCR_EXCEPTION_LIST 0x0
168 #define KPCR_INITIAL_STACK 0x4
169 #define KPCR_STACK_LIMIT 0x8
170 #define KPCR_PERF_GLOBAL_GROUP_MASK 0x8
171 #define KPCR_CONTEXT_SWITCHES 0x10
172 #define KPCR_SET_MEMBER_COPY 0x14
173 #define KPCR_TEB 0x18
174 #define KPCR_SELF 0x1C
175 #define KPCR_PRCB 0x20
176 #define KPCR_IRQL 0x24
177 #define KPCR_IRR 0x28
178 #define KPCR_IRR_ACTIVE 0x2C
179 #define KPCR_IDR 0x30
180 #define KPCR_KD_VERSION_BLOCK 0x34
181 #define KPCR_IDT 0x38
182 #define KPCR_GDT 0x3C
183 #define KPCR_TSS 0x40
184 #define KPCR_STALL_SCALE_FACTOR 0x4C
185 #define KPCR_SET_MEMBER 0x48
186 #define KPCR_NUMBER 0x51
187 #define KPCR_VDM_ALERT 0x54
188 #define KPCR_PRCB_DATA 0x120
189 #define KPCR_CURRENT_THREAD 0x124
190 #define KPCR_PRCB_NEXT_THREAD 0x128
191 #define KPCR_PRCB_IDLE_THREAD 0x12C
192 #define KPCR_PROCESSOR_NUMBER 0x130
193 #define KPCR_PRCB_SET_MEMBER 0x134
194 #define KPCR_PRCB_CPU_TYPE 0x138
195 #define KPCR_NPX_THREAD 0x640
196 #define KPCR_DR6 0x428
197 #define KPCR_DR7 0x42C
198 #define KPCR_PRCB_INTERRUPT_COUNT 0x644
199 #define KPCR_PRCB_KERNEL_TIME 0x648
200 #define KPCR_PRCB_USER_TIME 0x64C
201 #define KPCR_PRCB_DPC_TIME 0x650
202 #define KPCR_PRCB_DEBUG_DPC_TIME 0x654
203 #define KPCR_PRCB_INTERRUPT_TIME 0x658
204 #define KPCR_PRCB_ADJUST_DPC_THRESHOLD 0x65C
205 #define KPCR_SYSTEM_CALLS 0x6B8
206 #define KPCR_PRCB_DPC_QUEUE_DEPTH 0xA4C
207 #define KPCR_PRCB_DPC_COUNT 0xA50
208 #define KPCR_PRCB_DPC_STACK 0xA68
209 #define KPCR_PRCB_MAXIMUM_DPC_QUEUE_DEPTH 0xA6C
210 #define KPCR_PRCB_DPC_REQUEST_RATE 0xA70
211 #define KPCR_PRCB_DPC_INTERRUPT_REQUESTED 0xA78
212 #define KPCR_PRCB_DPC_ROUTINE_ACTIVE 0xA7A
213 #define KPCR_PRCB_DPC_LAST_COUNT 0xA80
214 #define KPCR_PRCB_TIMER_REQUEST 0xA88
215 #define KPCR_PRCB_QUANTUM_END 0xAA1
216 #define KPCR_PRCB_DEFERRED_READY_LIST_HEAD 0xC10
217 #define KPCR_PRCB_POWER_STATE_IDLE_FUNCTION 0xEC0
218
219 //
220 // KINTERRUPT Offsets
221 //
222 #define KINTERRUPT_SERVICE_ROUTINE 0x0C
223 #define KINTERRUPT_SERVICE_CONTEXT 0x10
224 #define KINTERRUPT_ACTUAL_LOCK 0x1C
225 #define KINTERRUPT_IRQL 0x20
226 #define KINTERRUPT_VECTOR 0x24
227 #define KINTERRUPT_SYNCHRONIZE_IRQL 0x29
228
229 //
230 // KGDTENTRY Offsets
231 //
232 #define KGDT_BASE_LOW 0x2
233 #define KGDT_BASE_MID 0x4
234 #define KGDT_BASE_HI 0x7
235 #define KGDT_LIMIT_HI 0x6
236 #define KGDT_LIMIT_LOW 0x0
237
238 //
239 // FPU Save Area Offsets
240 //
241 #define FP_CONTROL_WORD 0x0
242 #define FP_STATUS_WORD 0x4
243 #define FP_TAG_WORD 0x8
244 #define FP_ERROR_OFFSET 0xC
245 #define FP_ERROR_SELECTOR 0x10
246 #define FP_DATA_OFFSET 0x14
247 #define FP_DATA_SELECTOR 0x18
248 #define FN_CR0_NPX_STATE 0x20C
249 #define SIZEOF_FX_SAVE_AREA 528
250 #define NPX_FRAME_LENGTH 0x210
251
252 //
253 // FX Save Area Offsets
254 //
255 #define FX_CONTROL_WORD 0x0
256 #define FX_STATUS_WORD 0x2
257 #define FX_TAG_WORD 0x4
258 #define FX_ERROR_OPCODE 0x6
259 #define FX_ERROR_OFFSET 0x8
260 #define FX_ERROR_SELECTOR 0xC
261 #define FX_DATA_OFFSET 0x10
262 #define FX_DATA_SELECTOR 0x14
263
264 //
265 // NPX States
266 //
267 #define NPX_STATE_NOT_LOADED 0xA
268 #define NPX_STATE_LOADED 0x0
269
270 //
271 // Trap Frame Offsets
272 //
273 #define KTRAP_FRAME_DEBUGEBP 0x0
274 #define KTRAP_FRAME_DEBUGEIP 0x4
275 #define KTRAP_FRAME_DEBUGARGMARK 0x8
276 #define KTRAP_FRAME_DEBUGPOINTER 0xC
277 #define KTRAP_FRAME_TEMPCS 0x10
278 #define KTRAP_FRAME_TEMPESP 0x14
279 #define KTRAP_FRAME_DR0 0x18
280 #define KTRAP_FRAME_DR1 0x1C
281 #define KTRAP_FRAME_DR2 0x20
282 #define KTRAP_FRAME_DR3 0x24
283 #define KTRAP_FRAME_DR6 0x28
284 #define KTRAP_FRAME_DR7 0x2C
285 #define KTRAP_FRAME_GS 0x30
286 #define KTRAP_FRAME_RESERVED1 0x32
287 #define KTRAP_FRAME_ES 0x34
288 #define KTRAP_FRAME_RESERVED2 0x36
289 #define KTRAP_FRAME_DS 0x38
290 #define KTRAP_FRAME_RESERVED3 0x3A
291 #define KTRAP_FRAME_EDX 0x3C
292 #define KTRAP_FRAME_ECX 0x40
293 #define KTRAP_FRAME_EAX 0x44
294 #define KTRAP_FRAME_PREVIOUS_MODE 0x48
295 #define KTRAP_FRAME_EXCEPTION_LIST 0x4C
296 #define KTRAP_FRAME_FS 0x50
297 #define KTRAP_FRAME_RESERVED4 0x52
298 #define KTRAP_FRAME_EDI 0x54
299 #define KTRAP_FRAME_ESI 0x58
300 #define KTRAP_FRAME_EBX 0x5C
301 #define KTRAP_FRAME_EBP 0x60
302 #define KTRAP_FRAME_ERROR_CODE 0x64
303 #define KTRAP_FRAME_EIP 0x68
304 #define KTRAP_FRAME_CS 0x6C
305 #define KTRAP_FRAME_EFLAGS 0x70
306 #define KTRAP_FRAME_ESP 0x74
307 #define KTRAP_FRAME_SS 0x78
308 #define KTRAP_FRAME_RESERVED5 0x7A
309 #define KTRAP_FRAME_V86_ES 0x7C
310 #define KTRAP_FRAME_RESERVED6 0x7E
311 #define KTRAP_FRAME_V86_DS 0x80
312 #define KTRAP_FRAME_RESERVED7 0x82
313 #define KTRAP_FRAME_V86_FS 0x84
314 #define KTRAP_FRAME_RESERVED8 0x86
315 #define KTRAP_FRAME_V86_GS 0x88
316 #define KTRAP_FRAME_RESERVED9 0x8A
317 #define KTRAP_FRAME_SIZE 0x8C
318 #define KTRAP_FRAME_LENGTH 0x8C
319 #define KTRAP_FRAME_ALIGN 0x04
320 #define FRAME_EDITED 0xFFF8
321
322 //
323 // KUSER_SHARED_DATA Offsets
324 //
325 #ifdef __ASM__
326 #define USER_SHARED_DATA 0xFFDF0000
327 #endif
328 #define USER_SHARED_DATA_INTERRUPT_TIME 0x8
329 #define USER_SHARED_DATA_SYSTEM_TIME 0x14
330 #define USER_SHARED_DATA_TICK_COUNT 0x320
331
332 //
333 // KUSER_SHARED_DATA Offsets (this stuff is trash)
334 //
335 #define KERNEL_USER_SHARED_DATA 0x7FFE0000
336 #define KUSER_SHARED_PROCESSOR_FEATURES KERNEL_USER_SHARED_DATA + 0x274
337 #define KUSER_SHARED_SYSCALL KERNEL_USER_SHARED_DATA + 0x300
338 #define KUSER_SHARED_SYSCALL_RET KERNEL_USER_SHARED_DATA + 0x304
339 #define PROCESSOR_FEATURE_FXSR KUSER_SHARED_PROCESSOR_FEATURES + 0x4
340
341 //
342 // CONTEXT Offsets
343 //
344 #define CONTEXT_FLAGS 0x0
345 #define CONTEXT_DR6 0x14
346 #define CONTEXT_FLOAT_SAVE 0x1C
347 #define CONTEXT_SEGGS 0x8C
348 #define CONTEXT_SEGFS 0x90
349 #define CONTEXT_SEGES 0x94
350 #define CONTEXT_SEGDS 0x98
351 #define CONTEXT_EDI 0x9C
352 #define CONTEXT_ESI 0xA0
353 #define CONTEXT_EBX 0xA4
354 #define CONTEXT_EDX 0xA8
355 #define CONTEXT_ECX 0xAC
356 #define CONTEXT_EAX 0xB0
357 #define CONTEXT_EBP 0xB4
358 #define CONTEXT_EIP 0xB8
359 #define CONTEXT_SEGCS 0xBC
360 #define CONTEXT_EFLAGS 0xC0
361 #define CONTEXT_ESP 0xC4
362 #define CONTEXT_SEGSS 0xC8
363 #define CONTEXT_FLOAT_SAVE_CONTROL_WORD CONTEXT_FLOAT_SAVE + FP_CONTROL_WORD
364 #define CONTEXT_FLOAT_SAVE_STATUS_WORD CONTEXT_FLOAT_SAVE + FP_STATUS_WORD
365 #define CONTEXT_FLOAT_SAVE_TAG_WORD CONTEXT_FLOAT_SAVE + FP_TAG_WORD
366 #define CONTEXT_ALIGNED_SIZE 0x2CC
367
368 //
369 // EXCEPTION_RECORD Offsets
370 //
371 #define EXCEPTION_RECORD_EXCEPTION_CODE 0x0
372 #define EXCEPTION_RECORD_EXCEPTION_FLAGS 0x4
373 #define EXCEPTION_RECORD_EXCEPTION_RECORD 0x8
374 #define EXCEPTION_RECORD_EXCEPTION_ADDRESS 0xC
375 #define EXCEPTION_RECORD_NUMBER_PARAMETERS 0x10
376 #define SIZEOF_EXCEPTION_RECORD 0x14
377 #define EXCEPTION_RECORD_LENGTH 0x50
378
379 //
380 // Exception types
381 //
382 #ifdef __ASM__
383 #define EXCEPTION_NONCONTINUABLE 0x0001
384 #define EXCEPTION_UNWINDING 0x0002
385 #define EXCEPTION_EXIT_UNWIND 0x0004
386 #define EXCEPTION_STACK_INVALID 0x0008
387 #define EXCEPTION_NESTED_CALL 0x00010
388 #define EXCEPTION_TARGET_UNWIND 0x00020
389 #define EXCEPTION_COLLIDED_UNWIND 0x00040
390 #define EXCEPTION_UNWIND 0x00066
391 #define EXCEPTION_EXECUTE_HANDLER 0x00001
392 #define EXCEPTION_CONTINUE_SEARCH 0x00000
393 #define EXCEPTION_CONTINUE_EXECUTION 0xFFFFFFFF
394 #define EXCEPTION_CHAIN_END 0xFFFFFFFF
395 #endif
396
397 //
398 // TEB Offsets
399 //
400 #define TEB_EXCEPTION_LIST 0x0
401 #define TEB_STACK_BASE 0x4
402 #define TEB_STACK_LIMIT 0x8
403 #define TEB_FIBER_DATA 0x10
404 #define TEB_PEB 0x30
405 #define TEB_EXCEPTION_CODE 0x1A4
406 #define TEB_ACTIVATION_CONTEXT_STACK_POINTER 0x1A8
407 #define TEB_DEALLOCATION_STACK 0xE0C
408 #define TEB_GDI_BATCH_COUNT 0xF70
409 #define TEB_GUARANTEED_STACK_BYTES 0xF78
410 #define TEB_FLS_DATA 0xFB4
411
412 //
413 // PEB Offsets
414 //
415 #define PEB_KERNEL_CALLBACK_TABLE 0x2C
416
417 //
418 // FIBER Offsets
419 //
420 #define FIBER_PARAMETER 0x0
421 #define FIBER_EXCEPTION_LIST 0x4
422 #define FIBER_STACK_BASE 0x8
423 #define FIBER_STACK_LIMIT 0xC
424 #define FIBER_DEALLOCATION_STACK 0x10
425 #define FIBER_CONTEXT 0x14
426 #define FIBER_GUARANTEED_STACK_BYTES 0x2E0
427 #define FIBER_FLS_DATA 0x2E4
428 #define FIBER_ACTIVATION_CONTEXT_STACK 0x2E8
429 #define FIBER_CONTEXT_FLAGS FIBER_CONTEXT + CONTEXT_FLAGS
430 #define FIBER_CONTEXT_EAX FIBER_CONTEXT + CONTEXT_EAX
431 #define FIBER_CONTEXT_EBX FIBER_CONTEXT + CONTEXT_EBX
432 #define FIBER_CONTEXT_ECX FIBER_CONTEXT + CONTEXT_ECX
433 #define FIBER_CONTEXT_EDX FIBER_CONTEXT + CONTEXT_EDX
434 #define FIBER_CONTEXT_ESI FIBER_CONTEXT + CONTEXT_ESI
435 #define FIBER_CONTEXT_EDI FIBER_CONTEXT + CONTEXT_EDI
436 #define FIBER_CONTEXT_EBP FIBER_CONTEXT + CONTEXT_EBP
437 #define FIBER_CONTEXT_ESP FIBER_CONTEXT + CONTEXT_ESP
438 #define FIBER_CONTEXT_DR6 FIBER_CONTEXT + CONTEXT_DR6
439 #define FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_STATUS_WORD
440 #define FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_CONTROL_WORD
441 #define FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD FIBER_CONTEXT + CONTEXT_FLOAT_SAVE_TAG_WORD
442
443 //
444 // EFLAGS
445 //
446 #ifdef __ASM__
447 #define EFLAGS_TF 0x100
448 #define EFLAGS_INTERRUPT_MASK 0x200
449 #define EFLAGS_NESTED_TASK 0x4000
450 #define EFLAGS_V86_MASK 0x20000
451 #define EFLAGS_ALIGN_CHECK 0x40000
452 #define EFLAGS_VIF 0x80000
453 #define EFLAGS_VIP 0x100000
454 #define EFLAG_SIGN 0x8000
455 #define EFLAG_ZERO 0x4000
456 #define EFLAG_SELECT (EFLAG_SIGN + EFLAG_ZERO)
457 #endif
458 #define EFLAGS_USER_SANITIZE 0x3F4DD7
459
460 //
461 // CR0
462 //
463 #define CR0_PE 0x1
464 #define CR0_MP 0x2
465 #define CR0_EM 0x4
466 #define CR0_TS 0x8
467 #define CR0_ET 0x10
468 #define CR0_NE 0x20
469 #define CR0_WP 0x10000
470 #define CR0_AM 0x40000
471 #define CR0_NW 0x20000000
472 #define CR0_CD 0x40000000
473 #define CR0_PG 0x80000000
474
475 //
476 // CR4
477 //
478 #ifdef __ASM__
479 #define CR4_VME 0x1
480 #define CR4_PVI 0x2
481 #define CR4_TSD 0x4
482 #define CR4_DE 0x8
483 #define CR4_PSE 0x10
484 #define CR4_PAE 0x20
485 #define CR4_MCE 0x40
486 #define CR4_PGE 0x80
487 #define CR4_FXSR 0x200
488 #define CR4_XMMEXCPT 0x400
489 #endif
490
491 //
492 // DR6 and 7 Masks
493 //
494 #define DR6_LEGAL 0xE00F
495 #define DR7_LEGAL 0xFFFF0155
496 #define DR7_ACTIVE 0x55
497 #define DR7_RESERVED_MASK 0xDC00
498 #define DR7_OVERRIDE_MASK 0xF0000
499
500 //
501 // Usermode callout frame definitions
502 //
503 #define CBSTACK_STACK 0x0
504 #define CBSTACK_TRAP_FRAME 0x4
505 #define CBSTACK_CALLBACK_STACK 0x8
506 #define CBSTACK_RESULT 0x20
507 #define CBSTACK_RESULT_LENGTH 0x24
508
509 //
510 // NTSTATUS and Bugcheck Codes
511 //
512 #ifdef __ASM__
513 #define STATUS_ACCESS_VIOLATION 0xC0000005
514 #define STATUS_IN_PAGE_ERROR 0xC0000006
515 #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
516 #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
517 #define STATUS_STACK_OVERFLOW 0xC00000FD
518 #define KI_EXCEPTION_ACCESS_VIOLATION 0x10000004
519 #define STATUS_INVALID_SYSTEM_SERVICE 0xC000001C
520 #define STATUS_NO_CALLBACK_ACTIVE 0xC0000258
521 #define STATUS_CALLBACK_POP_STACK 0xC0000423
522 #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
523 #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
524 #define STATUS_INVALID_LOCK_SEQUENCE 0xC000001E
525 #define STATUS_BREAKPOINT 0x80000003
526 #define STATUS_SINGLE_STEP 0x80000004
527 #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
528 #define STATUS_INTEGER_OVERFLOW 0xC0000095
529 #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
530 #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
531 #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
532 #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
533 #define STATUS_FLOAT_OVERFLOW 0xC0000091
534 #define STATUS_FLOAT_STACK_CHECK 0xC0000092
535 #define STATUS_FLOAT_UNDERFLOW 0xC0000093
536 #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
537 #define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
538 #define APC_INDEX_MISMATCH 0x01
539 #define IRQL_NOT_GREATER_OR_EQUAL 0x09
540 #define IRQL_NOT_LESS_OR_EQUAL 0x0A
541 #define TRAP_CAUSE_UNKNOWN 0x12
542 #define KMODE_EXCEPTION_NOT_HANDLED 0x13
543 #define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x4A
544 #define UNEXPECTED_KERNEL_MODE_TRAP 0x7F
545 #define ATTEMPTED_SWITCH_FROM_DPC 0xB8
546
547 //
548 // IRQL Levels
549 //
550 #define PASSIVE_LEVEL 0x0
551 #define APC_LEVEL 0x1
552 #define DISPATCH_LEVEL 0x2
553 #define CLOCK2_LEVEL 0x1C
554 #define HIGH_LEVEL 0x1F
555
556 //
557 // Quantum Decrements
558 //
559 #define CLOCK_QUANTUM_DECREMENT 0x3
560 #endif
561
562 //
563 // System Call Table definitions
564 //
565 #define NUMBER_SERVICE_TABLES 0x0002
566 #define SERVICE_NUMBER_MASK 0x0FFF
567 #define SERVICE_TABLE_SHIFT 0x0008
568 #define SERVICE_TABLE_MASK 0x0010
569 #define SERVICE_TABLE_TEST 0x0010
570 #define SERVICE_DESCRIPTOR_BASE 0x0000
571 #define SERVICE_DESCRIPTOR_COUNT 0x0004
572 #define SERVICE_DESCRIPTOR_LIMIT 0x0008
573 #define SERVICE_DESCRIPTOR_NUMBER 0x000C
574 #define SERVICE_DESCRIPTOR_LENGTH 0x0010
575
576 //
577 // VDM State Pointer
578 //
579 #define FIXED_NTVDMSTATE_LINEAR_PC_AT 0x714
580
581 //
582 // Machine types
583 //
584 #ifdef __ASM__
585 #define MACHINE_TYPE_ISA 0x0000
586 #define MACHINE_TYPE_EISA 0x0001
587 #define MACHINE_TYPE_MCA 0x0002
588
589 //
590 // Kernel Feature Bits
591 //
592 #define KF_RDTSC 0x00000002
593
594 //
595 // Kernel Stack Size
596 //
597 #define KERNEL_STACK_SIZE 0x3000
598 #endif
599
600 //
601 // Generic Definitions
602 //
603 #define PRIMARY_VECTOR_BASE 0x30 // FIXME: HACK
604 #define MAXIMUM_IDTVECTOR 0xFF
605 #endif // !_ASM_H
606