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