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