d8f38c0b84837bfb05f97d45091b6c71fd2104f1
[reactos.git] / reactos / ntoskrnl / include / internal / ke.h
1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_KE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_KE_H
3
4 /* INCLUDES *****************************************************************/
5
6 #include "arch/ke.h"
7
8 /* INTERNAL KERNEL TYPES ****************************************************/
9
10 typedef struct _WOW64_PROCESS
11 {
12 PVOID Wow64;
13 } WOW64_PROCESS, *PWOW64_PROCESS;
14
15 typedef struct _KPROFILE_SOURCE_OBJECT
16 {
17 KPROFILE_SOURCE Source;
18 LIST_ENTRY ListEntry;
19 } KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
20
21 typedef enum _CONNECT_TYPE
22 {
23 NoConnect,
24 NormalConnect,
25 ChainConnect,
26 UnknownConnect
27 } CONNECT_TYPE, *PCONNECT_TYPE;
28
29 typedef struct _DISPATCH_INFO
30 {
31 CONNECT_TYPE Type;
32 PKINTERRUPT Interrupt;
33 PKINTERRUPT_ROUTINE NoDispatch;
34 PKINTERRUPT_ROUTINE InterruptDispatch;
35 PKINTERRUPT_ROUTINE FloatingDispatch;
36 PKINTERRUPT_ROUTINE ChainedDispatch;
37 PKINTERRUPT_ROUTINE *FlatDispatch;
38 } DISPATCH_INFO, *PDISPATCH_INFO;
39
40 typedef struct _KTIMER_TABLE_ENTRY
41 {
42 LIST_ENTRY Entry;
43 ULARGE_INTEGER Time;
44 } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
45
46 typedef PCHAR
47 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
48 IN PUNICODE_STRING Unicode,
49 IN PCHAR Ansi,
50 IN ULONG Length
51 );
52
53 struct _KIRQ_TRAPFRAME;
54 struct _KPCR;
55 struct _KPRCB;
56 struct _KEXCEPTION_FRAME;
57
58 extern ULONG_PTR MmFreeLdrFirstKrnlPhysAddr;
59 extern ULONG_PTR MmFreeLdrLastKrnlPhysAddr;
60 extern ULONG_PTR MmFreeLdrLastKernelAddress;
61
62 extern PVOID KeUserApcDispatcher;
63 extern PVOID KeUserCallbackDispatcher;
64 extern PVOID KeUserExceptionDispatcher;
65 extern PVOID KeRaiseUserExceptionDispatcher;
66 extern LARGE_INTEGER KeBootTime;
67 extern ULONG KeI386NpxPresent;
68 extern ULONG KeI386XMMIPresent;
69 extern ULONG KeI386FxsrPresent;
70 extern ULONG KiMXCsrMask;
71 extern ULONG KeI386CpuType;
72 extern ULONG KeI386CpuStep;
73 extern ULONG KeProcessorArchitecture;
74 extern ULONG KeProcessorLevel;
75 extern ULONG KeProcessorRevision;
76 extern ULONG KeFeatureBits;
77 extern ULONG Ke386GlobalPagesEnabled;
78 extern BOOLEAN KiI386PentiumLockErrataPresent;
79 extern KNODE KiNode0;
80 extern PKNODE KeNodeBlock[1];
81 extern UCHAR KeNumberNodes;
82 extern UCHAR KeProcessNodeSeed;
83 extern ETHREAD KiInitialThread;
84 extern EPROCESS KiInitialProcess;
85 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
86 extern PULONG KiInterruptTemplateObject;
87 extern PULONG KiInterruptTemplateDispatch;
88 extern PULONG KiInterruptTemplate2ndDispatch;
89 extern ULONG KiUnexpectedEntrySize;
90 extern PVOID Ki386IopmSaveArea;
91 extern ULONG KeI386EFlagsAndMaskV86;
92 extern ULONG KeI386EFlagsOrMaskV86;
93 extern BOOLEAN KeI386VirtualIntExtensions;
94 extern KIDTENTRY KiIdt[];
95 extern KGDTENTRY KiBootGdt[];
96 extern KDESCRIPTOR KiGdtDescriptor;
97 extern KDESCRIPTOR KiIdtDescriptor;
98 extern KTSS KiBootTss;
99 extern UCHAR P0BootStack[];
100 extern UCHAR KiDoubleFaultStack[];
101 extern FAST_MUTEX KernelAddressSpaceLock;
102 extern ULONG KiMaximumDpcQueueDepth;
103 extern ULONG KiMinimumDpcRate;
104 extern ULONG KiAdjustDpcThreshold;
105 extern ULONG KiIdealDpcRate;
106 extern BOOLEAN KeThreadDpcEnable;
107 extern LARGE_INTEGER KiTimeIncrementReciprocal;
108 extern UCHAR KiTimeIncrementShiftCount;
109 extern ULONG KiTimeLimitIsrMicroseconds;
110 extern ULONG KiServiceLimit;
111 extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
112 extern KSPIN_LOCK BugCheckCallbackLock;
113 extern KDPC KiExpireTimerDpc;
114 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
115 extern LIST_ENTRY KiTimerListHead;
116 extern KMUTEX KiGenericCallDpcMutex;
117 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
118 extern KSPIN_LOCK KiProfileLock;
119 extern LIST_ENTRY KiProcessListHead;
120 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
121 extern LIST_ENTRY KiStackInSwapListHead;
122 extern KEVENT KiSwapEvent;
123 extern PKPRCB KiProcessorBlock[];
124 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
125 extern ULONG KiIdleSummary;
126 extern VOID KiTrap8(VOID);
127 extern VOID KiTrap2(VOID);
128 extern VOID KiFastCallEntry(VOID);
129 extern PVOID KeUserApcDispatcher;
130 extern PVOID KeUserCallbackDispatcher;
131 extern PVOID KeUserExceptionDispatcher;
132 extern PVOID KeRaiseUserExceptionDispatcher;
133 extern UCHAR KiDebugRegisterTrapOffsets[9];
134 extern UCHAR KiDebugRegisterContextOffsets[9];
135
136 /* MACROS *************************************************************************/
137
138 #define AFFINITY_MASK(Id) KiMask32Array[Id]
139 #define PRIORITY_MASK(Id) KiMask32Array[Id]
140
141 /* The following macro initializes a dispatcher object's header */
142 #define KeInitializeDispatcherHeader(Header, t, s, State) \
143 { \
144 (Header)->Type = t; \
145 (Header)->Absolute = 0; \
146 (Header)->Inserted = 0; \
147 (Header)->Size = s; \
148 (Header)->SignalState = State; \
149 InitializeListHead(&((Header)->WaitListHead)); \
150 }
151
152 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
153 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
154 KeBugCheckWithTf(a,b,c,d,e,f)
155
156 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
157 #define TIMER_OR_EVENT_TYPE 0x7L
158
159 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
160 #define TIMER_WAIT_BLOCK 0x3L
161
162 /* IOPM Definitions */
163 #define IO_ACCESS_MAP_NONE 0
164 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
165 #define KiComputeIopmOffset(MapNumber) \
166 (MapNumber == IO_ACCESS_MAP_NONE) ? \
167 (USHORT)(sizeof(KTSS)) : \
168 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
169
170 #define SIZE_OF_FX_REGISTERS 32
171
172 /* INTERNAL KERNEL FUNCTIONS ************************************************/
173
174 /* Readies a Thread for Execution. */
175 BOOLEAN
176 NTAPI
177 KiDispatchThreadNoLock(ULONG NewThreadStatus);
178
179 /* Readies a Thread for Execution. */
180 VOID
181 NTAPI
182 KiDispatchThread(ULONG NewThreadStatus);
183
184 /* Finds a new thread to run */
185 NTSTATUS
186 FASTCALL
187 KiSwapThread(
188 IN PKTHREAD Thread,
189 IN PKPRCB Prcb
190 );
191
192 VOID
193 NTAPI
194 KeReadyThread(
195 IN PKTHREAD Thread
196 );
197
198 VOID
199 NTAPI
200 KiReadyThread(IN PKTHREAD Thread);
201
202 NTSTATUS
203 NTAPI
204 KeSuspendThread(PKTHREAD Thread);
205
206 BOOLEAN
207 FASTCALL
208 KiSwapContext(
209 IN PKTHREAD CurrentThread,
210 IN PKTHREAD NewThread
211 );
212
213 VOID
214 NTAPI
215 KiAdjustQuantumThread(IN PKTHREAD Thread);
216
217 VOID
218 FASTCALL
219 KiExitDispatcher(KIRQL OldIrql);
220
221 VOID
222 NTAPI
223 KiDeferredReadyThread(IN PKTHREAD Thread);
224
225 KAFFINITY
226 FASTCALL
227 KiSetAffinityThread(
228 IN PKTHREAD Thread,
229 IN KAFFINITY Affinity
230 );
231
232 PKTHREAD
233 FASTCALL
234 KiSelectNextThread(
235 IN PKPRCB Prcb
236 );
237
238 /* gmutex.c ********************************************************************/
239
240 VOID
241 FASTCALL
242 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
243
244 /* gate.c **********************************************************************/
245
246 VOID
247 FASTCALL
248 KeInitializeGate(PKGATE Gate);
249
250 VOID
251 FASTCALL
252 KeSignalGateBoostPriority(PKGATE Gate);
253
254 VOID
255 FASTCALL
256 KeWaitForGate(
257 PKGATE Gate,
258 KWAIT_REASON WaitReason,
259 KPROCESSOR_MODE WaitMode
260 );
261
262 /* ipi.c ********************************************************************/
263
264 VOID
265 NTAPI
266 KiIpiSendRequest(
267 KAFFINITY TargetSet,
268 ULONG IpiRequest
269 );
270
271 /* next file ***************************************************************/
272
273 UCHAR
274 NTAPI
275 KeFindNextRightSetAffinity(
276 IN UCHAR Number,
277 IN ULONG Set
278 );
279
280 VOID
281 NTAPI
282 DbgBreakPointNoBugCheck(VOID);
283
284 VOID
285 NTAPI
286 KeInitializeProfile(
287 struct _KPROFILE* Profile,
288 struct _KPROCESS* Process,
289 PVOID ImageBase,
290 ULONG ImageSize,
291 ULONG BucketSize,
292 KPROFILE_SOURCE ProfileSource,
293 KAFFINITY Affinity
294 );
295
296 VOID
297 NTAPI
298 KeStartProfile(
299 struct _KPROFILE* Profile,
300 PVOID Buffer
301 );
302
303 BOOLEAN
304 NTAPI
305 KeStopProfile(struct _KPROFILE* Profile);
306
307 ULONG
308 NTAPI
309 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
310
311 VOID
312 NTAPI
313 KeSetIntervalProfile(
314 KPROFILE_SOURCE ProfileSource,
315 ULONG Interval
316 );
317
318 VOID
319 NTAPI
320 KeProfileInterrupt(
321 PKTRAP_FRAME TrapFrame
322 );
323
324 VOID
325 NTAPI
326 KeProfileInterruptWithSource(
327 IN PKTRAP_FRAME TrapFrame,
328 IN KPROFILE_SOURCE Source
329 );
330
331 BOOLEAN
332 NTAPI
333 KiRosPrintAddress(PVOID Address);
334
335 VOID
336 NTAPI
337 KeUpdateRunTime(
338 PKTRAP_FRAME TrapFrame,
339 KIRQL Irql
340 );
341
342 VOID
343 NTAPI
344 KiExpireTimers(
345 PKDPC Dpc,
346 PVOID DeferredContext,
347 PVOID SystemArgument1,
348 PVOID SystemArgument2
349 );
350
351 VOID
352 NTAPI
353 KeInitializeThread(
354 IN PKPROCESS Process,
355 IN OUT PKTHREAD Thread,
356 IN PKSYSTEM_ROUTINE SystemRoutine,
357 IN PKSTART_ROUTINE StartRoutine,
358 IN PVOID StartContext,
359 IN PCONTEXT Context,
360 IN PVOID Teb,
361 IN PVOID KernelStack
362 );
363
364 VOID
365 NTAPI
366 KeUninitThread(
367 IN PKTHREAD Thread
368 );
369
370 NTSTATUS
371 NTAPI
372 KeInitThread(
373 IN OUT PKTHREAD Thread,
374 IN PVOID KernelStack,
375 IN PKSYSTEM_ROUTINE SystemRoutine,
376 IN PKSTART_ROUTINE StartRoutine,
377 IN PVOID StartContext,
378 IN PCONTEXT Context,
379 IN PVOID Teb,
380 IN PKPROCESS Process
381 );
382
383 VOID
384 NTAPI
385 KeStartThread(
386 IN OUT PKTHREAD Thread
387 );
388
389 BOOLEAN
390 NTAPI
391 KeAlertThread(
392 IN PKTHREAD Thread,
393 IN KPROCESSOR_MODE AlertMode
394 );
395
396 ULONG
397 NTAPI
398 KeAlertResumeThread(
399 IN PKTHREAD Thread
400 );
401
402 ULONG
403 NTAPI
404 KeResumeThread(
405 IN PKTHREAD Thread
406 );
407
408 PVOID
409 NTAPI
410 KeSwitchKernelStack(
411 IN PVOID StackBase,
412 IN PVOID StackLimit
413 );
414
415 VOID
416 NTAPI
417 KeRundownThread(VOID);
418
419 NTSTATUS
420 NTAPI
421 KeReleaseThread(PKTHREAD Thread);
422
423 VOID
424 NTAPI
425 KiSuspendRundown(
426 IN PKAPC Apc
427 );
428
429 VOID
430 NTAPI
431 KiSuspendNop(
432 IN PKAPC Apc,
433 IN PKNORMAL_ROUTINE *NormalRoutine,
434 IN PVOID *NormalContext,
435 IN PVOID *SystemArgument1,
436 IN PVOID *SystemArgument2
437 );
438
439 VOID
440 NTAPI
441 KiSuspendThread(
442 IN PVOID NormalContext,
443 IN PVOID SystemArgument1,
444 IN PVOID SystemArgument2
445 );
446
447 LONG
448 NTAPI
449 KeQueryBasePriorityThread(IN PKTHREAD Thread);
450
451 VOID
452 NTAPI
453 KiSetPriorityThread(
454 IN PKTHREAD Thread,
455 IN KPRIORITY Priority,
456 IN PBOOLEAN Released // hack
457 );
458
459 BOOLEAN
460 NTAPI
461 KiDispatcherObjectWake(
462 DISPATCHER_HEADER* hdr,
463 KPRIORITY increment
464 );
465
466 VOID
467 FASTCALL
468 KiUnlinkThread(
469 IN PKTHREAD Thread,
470 IN NTSTATUS WaitStatus
471 );
472
473 VOID
474 NTAPI
475 KeExpireTimers(
476 PKDPC Apc,
477 PVOID Arg1,
478 PVOID Arg2,
479 PVOID Arg3
480 );
481
482 VOID
483 NTAPI
484 KeDumpStackFrames(PULONG Frame);
485
486 BOOLEAN
487 NTAPI
488 KiTestAlert(VOID);
489
490 VOID
491 FASTCALL
492 KiUnwaitThread(
493 IN PKTHREAD Thread,
494 IN NTSTATUS WaitStatus,
495 IN KPRIORITY Increment
496 );
497
498 VOID
499 NTAPI
500 KeInitializeProcess(
501 struct _KPROCESS *Process,
502 KPRIORITY Priority,
503 KAFFINITY Affinity,
504 PLARGE_INTEGER DirectoryTableBase,
505 IN BOOLEAN Enable
506 );
507
508 VOID
509 NTAPI
510 KeSetQuantumProcess(
511 IN PKPROCESS Process,
512 IN UCHAR Quantum
513 );
514
515 KPRIORITY
516 NTAPI
517 KeSetPriorityAndQuantumProcess(
518 IN PKPROCESS Process,
519 IN KPRIORITY Priority,
520 IN UCHAR Quantum OPTIONAL
521 );
522
523 ULONG
524 NTAPI
525 KeForceResumeThread(IN PKTHREAD Thread);
526
527 VOID
528 NTAPI
529 KeThawAllThreads(
530 VOID
531 );
532
533 VOID
534 NTAPI
535 KeFreezeAllThreads(
536 VOID
537 );
538
539 BOOLEAN
540 NTAPI
541 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
542
543 BOOLEAN
544 NTAPI
545 KiInsertTimer(
546 PKTIMER Timer,
547 LARGE_INTEGER DueTime
548 );
549
550 VOID
551 FASTCALL
552 KiWaitTest(
553 PVOID Object,
554 KPRIORITY Increment
555 );
556
557 VOID
558 NTAPI
559 KeContextToTrapFrame(
560 PCONTEXT Context,
561 PKEXCEPTION_FRAME ExeptionFrame,
562 PKTRAP_FRAME TrapFrame,
563 ULONG ContextFlags,
564 KPROCESSOR_MODE PreviousMode
565 );
566
567 VOID
568 NTAPI
569 KiCheckForKernelApcDelivery(VOID);
570
571 LONG
572 NTAPI
573 KiInsertQueue(
574 IN PKQUEUE Queue,
575 IN PLIST_ENTRY Entry,
576 BOOLEAN Head
577 );
578
579 ULONG
580 NTAPI
581 KeSetProcess(
582 struct _KPROCESS* Process,
583 KPRIORITY Increment,
584 BOOLEAN InWait
585 );
586
587 VOID
588 NTAPI
589 KeInitializeEventPair(PKEVENT_PAIR EventPair);
590
591 VOID
592 NTAPI
593 KiInitializeUserApc(
594 IN PKEXCEPTION_FRAME Reserved,
595 IN PKTRAP_FRAME TrapFrame,
596 IN PKNORMAL_ROUTINE NormalRoutine,
597 IN PVOID NormalContext,
598 IN PVOID SystemArgument1,
599 IN PVOID SystemArgument2
600 );
601
602 PLIST_ENTRY
603 NTAPI
604 KeFlushQueueApc(
605 IN PKTHREAD Thread,
606 IN KPROCESSOR_MODE PreviousMode
607 );
608
609 VOID
610 NTAPI
611 KiAttachProcess(
612 struct _KTHREAD *Thread,
613 struct _KPROCESS *Process,
614 PKLOCK_QUEUE_HANDLE ApcLock,
615 struct _KAPC_STATE *SavedApcState
616 );
617
618 VOID
619 NTAPI
620 KiSwapProcess(
621 struct _KPROCESS *NewProcess,
622 struct _KPROCESS *OldProcess
623 );
624
625 BOOLEAN
626 NTAPI
627 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
628
629 BOOLEAN
630 NTAPI
631 KeRemoveQueueApc(PKAPC Apc);
632
633 VOID
634 FASTCALL
635 KiActivateWaiterQueue(IN PKQUEUE Queue);
636
637 /* INITIALIZATION FUNCTIONS *************************************************/
638
639 BOOLEAN
640 NTAPI
641 KeInitSystem(VOID);
642
643 VOID
644 NTAPI
645 KeInitExceptions(VOID);
646
647 VOID
648 NTAPI
649 KeInitInterrupts(VOID);
650
651 VOID
652 NTAPI
653 KiInitializeBugCheck(VOID);
654
655 VOID
656 NTAPI
657 KiInitializeSystemClock(VOID);
658
659 VOID
660 NTAPI
661 KiSystemStartup(
662 IN PLOADER_PARAMETER_BLOCK LoaderBlock
663 );
664
665 BOOLEAN
666 NTAPI
667 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
668
669 VOID
670 NTAPI
671 KiMoveApcState(
672 PKAPC_STATE OldState,
673 PKAPC_STATE NewState
674 );
675
676 VOID
677 NTAPI
678 KiAddProfileEvent(
679 KPROFILE_SOURCE Source,
680 ULONG Pc
681 );
682
683 VOID
684 NTAPI
685 KiDispatchException(
686 PEXCEPTION_RECORD ExceptionRecord,
687 PKEXCEPTION_FRAME ExceptionFrame,
688 PKTRAP_FRAME Tf,
689 KPROCESSOR_MODE PreviousMode,
690 BOOLEAN SearchFrames
691 );
692
693 VOID
694 NTAPI
695 KeTrapFrameToContext(
696 IN PKTRAP_FRAME TrapFrame,
697 IN PKEXCEPTION_FRAME ExceptionFrame,
698 IN OUT PCONTEXT Context
699 );
700
701 VOID
702 NTAPI
703 KeBugCheckWithTf(
704 ULONG BugCheckCode,
705 ULONG BugCheckParameter1,
706 ULONG BugCheckParameter2,
707 ULONG BugCheckParameter3,
708 ULONG BugCheckParameter4,
709 PKTRAP_FRAME Tf
710 );
711
712 VOID
713 NTAPI
714 KeFlushCurrentTb(VOID);
715
716 VOID
717 NTAPI
718 KeRosDumpStackFrames(
719 PULONG Frame,
720 ULONG FrameCount
721 );
722
723 VOID
724 NTAPI
725 KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
726
727 ULONG
728 NTAPI
729 KeV86Exception(
730 ULONG ExceptionNr,
731 PKTRAP_FRAME Tf,
732 ULONG address
733 );
734
735 VOID
736 NTAPI
737 KiStartUnexpectedRange(
738 VOID
739 );
740
741 VOID
742 NTAPI
743 KiEndUnexpectedRange(
744 VOID
745 );
746
747 VOID
748 NTAPI
749 KiInterruptDispatch(
750 VOID
751 );
752
753 VOID
754 NTAPI
755 KiChainedDispatch(
756 VOID
757 );
758
759 VOID
760 NTAPI
761 Ki386AdjustEsp0(
762 IN PKTRAP_FRAME TrapFrame
763 );
764
765 VOID
766 NTAPI
767 Ki386SetupAndExitToV86Mode(
768 OUT PTEB VdmTeb
769 );
770
771 VOID
772 NTAPI
773 KeI386VdmInitialize(
774 VOID
775 );
776
777 VOID
778 NTAPI
779 KiInitializeMachineType(
780 VOID
781 );
782
783 VOID
784 NTAPI
785 KiFlushNPXState(
786 IN FLOATING_SAVE_AREA *SaveArea
787 );
788
789 VOID
790 NTAPI
791 KiInitSpinLocks(
792 IN PKPRCB Prcb,
793 IN CCHAR Number
794 );
795
796 LARGE_INTEGER
797 NTAPI
798 KiComputeReciprocal(
799 IN LONG Divisor,
800 OUT PUCHAR Shift
801 );
802
803 VOID
804 NTAPI
805 KiInitSystem(
806 VOID
807 );
808
809 VOID
810 FASTCALL
811 KiInsertQueueApc(
812 IN PKAPC Apc,
813 IN KPRIORITY PriorityBoost
814 );
815
816 NTSTATUS
817 NTAPI
818 KiCallUserMode(
819 IN PVOID *OutputBuffer,
820 IN PULONG OutputLength
821 );
822
823 PULONG
824 NTAPI
825 KiGetUserModeStackAddress(
826 VOID
827 );
828
829 ULONG_PTR
830 NTAPI
831 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
832
833 VOID
834 NTAPI
835 KiInitializePAT(VOID);
836
837 VOID
838 NTAPI
839 KiInitializeMTRR(IN BOOLEAN FinalCpu);
840
841 VOID
842 NTAPI
843 KiAmdK6InitializeMTRR(VOID);
844
845 VOID
846 NTAPI
847 KiRestoreFastSyscallReturnState(VOID);
848
849 ULONG_PTR
850 NTAPI
851 Ki386EnableDE(IN ULONG_PTR Context);
852
853 ULONG_PTR
854 NTAPI
855 Ki386EnableFxsr(IN ULONG_PTR Context);
856
857 ULONG_PTR
858 NTAPI
859 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
860
861 VOID
862 NTAPI
863 KiInitMachineDependent(VOID);
864
865 VOID
866 NTAPI
867 KiI386PentiumLockErrataFixup(VOID);
868
869 VOID
870 WRMSR(
871 IN ULONG Register,
872 IN LONGLONG Value
873 );
874
875 #include "ke_x.h"
876
877 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */