447c26aeec7619a9665dc948f66fe8ee56d478a4
[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 NTAPI
227 KiSetAffinityThread(
228 IN PKTHREAD Thread,
229 IN KAFFINITY Affinity,
230 IN PBOOLEAN Released // hack
231 );
232
233 PKTHREAD
234 NTAPI
235 KiSelectNextThread(
236 IN PKPRCB Prcb
237 );
238
239 /* gmutex.c ********************************************************************/
240
241 VOID
242 FASTCALL
243 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
244
245 /* gate.c **********************************************************************/
246
247 VOID
248 FASTCALL
249 KeInitializeGate(PKGATE Gate);
250
251 VOID
252 FASTCALL
253 KeSignalGateBoostPriority(PKGATE Gate);
254
255 VOID
256 FASTCALL
257 KeWaitForGate(
258 PKGATE Gate,
259 KWAIT_REASON WaitReason,
260 KPROCESSOR_MODE WaitMode
261 );
262
263 /* ipi.c ********************************************************************/
264
265 VOID
266 NTAPI
267 KiIpiSendRequest(
268 KAFFINITY TargetSet,
269 ULONG IpiRequest
270 );
271
272 /* next file ***************************************************************/
273
274 UCHAR
275 NTAPI
276 KeFindNextRightSetAffinity(
277 IN UCHAR Number,
278 IN ULONG Set
279 );
280
281 VOID
282 NTAPI
283 DbgBreakPointNoBugCheck(VOID);
284
285 VOID
286 NTAPI
287 KeInitializeProfile(
288 struct _KPROFILE* Profile,
289 struct _KPROCESS* Process,
290 PVOID ImageBase,
291 ULONG ImageSize,
292 ULONG BucketSize,
293 KPROFILE_SOURCE ProfileSource,
294 KAFFINITY Affinity
295 );
296
297 VOID
298 NTAPI
299 KeStartProfile(
300 struct _KPROFILE* Profile,
301 PVOID Buffer
302 );
303
304 BOOLEAN
305 NTAPI
306 KeStopProfile(struct _KPROFILE* Profile);
307
308 ULONG
309 NTAPI
310 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
311
312 VOID
313 NTAPI
314 KeSetIntervalProfile(
315 KPROFILE_SOURCE ProfileSource,
316 ULONG Interval
317 );
318
319 VOID
320 NTAPI
321 KeProfileInterrupt(
322 PKTRAP_FRAME TrapFrame
323 );
324
325 VOID
326 NTAPI
327 KeProfileInterruptWithSource(
328 IN PKTRAP_FRAME TrapFrame,
329 IN KPROFILE_SOURCE Source
330 );
331
332 BOOLEAN
333 NTAPI
334 KiRosPrintAddress(PVOID Address);
335
336 VOID
337 NTAPI
338 KeUpdateRunTime(
339 PKTRAP_FRAME TrapFrame,
340 KIRQL Irql
341 );
342
343 VOID
344 NTAPI
345 KiExpireTimers(
346 PKDPC Dpc,
347 PVOID DeferredContext,
348 PVOID SystemArgument1,
349 PVOID SystemArgument2
350 );
351
352 VOID
353 NTAPI
354 KeInitializeThread(
355 IN PKPROCESS Process,
356 IN OUT PKTHREAD Thread,
357 IN PKSYSTEM_ROUTINE SystemRoutine,
358 IN PKSTART_ROUTINE StartRoutine,
359 IN PVOID StartContext,
360 IN PCONTEXT Context,
361 IN PVOID Teb,
362 IN PVOID KernelStack
363 );
364
365 VOID
366 NTAPI
367 KeUninitThread(
368 IN PKTHREAD Thread
369 );
370
371 NTSTATUS
372 NTAPI
373 KeInitThread(
374 IN OUT PKTHREAD Thread,
375 IN PVOID KernelStack,
376 IN PKSYSTEM_ROUTINE SystemRoutine,
377 IN PKSTART_ROUTINE StartRoutine,
378 IN PVOID StartContext,
379 IN PCONTEXT Context,
380 IN PVOID Teb,
381 IN PKPROCESS Process
382 );
383
384 VOID
385 NTAPI
386 KeStartThread(
387 IN OUT PKTHREAD Thread
388 );
389
390 BOOLEAN
391 NTAPI
392 KeAlertThread(
393 IN PKTHREAD Thread,
394 IN KPROCESSOR_MODE AlertMode
395 );
396
397 ULONG
398 NTAPI
399 KeAlertResumeThread(
400 IN PKTHREAD Thread
401 );
402
403 ULONG
404 NTAPI
405 KeResumeThread(
406 IN PKTHREAD Thread
407 );
408
409 PVOID
410 NTAPI
411 KeSwitchKernelStack(
412 IN PVOID StackBase,
413 IN PVOID StackLimit
414 );
415
416 VOID
417 NTAPI
418 KeRundownThread(VOID);
419
420 NTSTATUS
421 NTAPI
422 KeReleaseThread(PKTHREAD Thread);
423
424 VOID
425 NTAPI
426 KiSuspendRundown(
427 IN PKAPC Apc
428 );
429
430 VOID
431 NTAPI
432 KiSuspendNop(
433 IN PKAPC Apc,
434 IN PKNORMAL_ROUTINE *NormalRoutine,
435 IN PVOID *NormalContext,
436 IN PVOID *SystemArgument1,
437 IN PVOID *SystemArgument2
438 );
439
440 VOID
441 NTAPI
442 KiSuspendThread(
443 IN PVOID NormalContext,
444 IN PVOID SystemArgument1,
445 IN PVOID SystemArgument2
446 );
447
448 LONG
449 NTAPI
450 KeQueryBasePriorityThread(IN PKTHREAD Thread);
451
452 VOID
453 NTAPI
454 KiSetPriorityThread(
455 IN PKTHREAD Thread,
456 IN KPRIORITY Priority,
457 IN PBOOLEAN Released // hack
458 );
459
460 BOOLEAN
461 NTAPI
462 KiDispatcherObjectWake(
463 DISPATCHER_HEADER* hdr,
464 KPRIORITY increment
465 );
466
467 VOID
468 FASTCALL
469 KiUnlinkThread(
470 IN PKTHREAD Thread,
471 IN NTSTATUS WaitStatus
472 );
473
474 VOID
475 NTAPI
476 KeExpireTimers(
477 PKDPC Apc,
478 PVOID Arg1,
479 PVOID Arg2,
480 PVOID Arg3
481 );
482
483 VOID
484 NTAPI
485 KeDumpStackFrames(PULONG Frame);
486
487 BOOLEAN
488 NTAPI
489 KiTestAlert(VOID);
490
491 VOID
492 FASTCALL
493 KiUnwaitThread(
494 IN PKTHREAD Thread,
495 IN NTSTATUS WaitStatus,
496 IN KPRIORITY Increment
497 );
498
499 VOID
500 NTAPI
501 KeInitializeProcess(
502 struct _KPROCESS *Process,
503 KPRIORITY Priority,
504 KAFFINITY Affinity,
505 PLARGE_INTEGER DirectoryTableBase,
506 IN BOOLEAN Enable
507 );
508
509 VOID
510 NTAPI
511 KeSetQuantumProcess(
512 IN PKPROCESS Process,
513 IN UCHAR Quantum
514 );
515
516 KPRIORITY
517 NTAPI
518 KeSetPriorityAndQuantumProcess(
519 IN PKPROCESS Process,
520 IN KPRIORITY Priority,
521 IN UCHAR Quantum OPTIONAL
522 );
523
524 ULONG
525 NTAPI
526 KeForceResumeThread(IN PKTHREAD Thread);
527
528 VOID
529 NTAPI
530 KeThawAllThreads(
531 VOID
532 );
533
534 VOID
535 NTAPI
536 KeFreezeAllThreads(
537 VOID
538 );
539
540 BOOLEAN
541 NTAPI
542 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
543
544 BOOLEAN
545 NTAPI
546 KiInsertTimer(
547 PKTIMER Timer,
548 LARGE_INTEGER DueTime
549 );
550
551 VOID
552 FASTCALL
553 KiWaitTest(
554 PVOID Object,
555 KPRIORITY Increment
556 );
557
558 VOID
559 NTAPI
560 KeContextToTrapFrame(
561 PCONTEXT Context,
562 PKEXCEPTION_FRAME ExeptionFrame,
563 PKTRAP_FRAME TrapFrame,
564 ULONG ContextFlags,
565 KPROCESSOR_MODE PreviousMode
566 );
567
568 VOID
569 NTAPI
570 KiCheckForKernelApcDelivery(VOID);
571
572 LONG
573 NTAPI
574 KiInsertQueue(
575 IN PKQUEUE Queue,
576 IN PLIST_ENTRY Entry,
577 BOOLEAN Head
578 );
579
580 ULONG
581 NTAPI
582 KeSetProcess(
583 struct _KPROCESS* Process,
584 KPRIORITY Increment,
585 BOOLEAN InWait
586 );
587
588 VOID
589 NTAPI
590 KeInitializeEventPair(PKEVENT_PAIR EventPair);
591
592 VOID
593 NTAPI
594 KiInitializeUserApc(
595 IN PKEXCEPTION_FRAME Reserved,
596 IN PKTRAP_FRAME TrapFrame,
597 IN PKNORMAL_ROUTINE NormalRoutine,
598 IN PVOID NormalContext,
599 IN PVOID SystemArgument1,
600 IN PVOID SystemArgument2
601 );
602
603 PLIST_ENTRY
604 NTAPI
605 KeFlushQueueApc(
606 IN PKTHREAD Thread,
607 IN KPROCESSOR_MODE PreviousMode
608 );
609
610 VOID
611 NTAPI
612 KiAttachProcess(
613 struct _KTHREAD *Thread,
614 struct _KPROCESS *Process,
615 PKLOCK_QUEUE_HANDLE ApcLock,
616 struct _KAPC_STATE *SavedApcState
617 );
618
619 VOID
620 NTAPI
621 KiSwapProcess(
622 struct _KPROCESS *NewProcess,
623 struct _KPROCESS *OldProcess
624 );
625
626 BOOLEAN
627 NTAPI
628 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
629
630 BOOLEAN
631 NTAPI
632 KeRemoveQueueApc(PKAPC Apc);
633
634 VOID
635 FASTCALL
636 KiActivateWaiterQueue(IN PKQUEUE Queue);
637
638 /* INITIALIZATION FUNCTIONS *************************************************/
639
640 BOOLEAN
641 NTAPI
642 KeInitSystem(VOID);
643
644 VOID
645 NTAPI
646 KeInitExceptions(VOID);
647
648 VOID
649 NTAPI
650 KeInitInterrupts(VOID);
651
652 VOID
653 NTAPI
654 KiInitializeBugCheck(VOID);
655
656 VOID
657 NTAPI
658 KiInitializeSystemClock(VOID);
659
660 VOID
661 NTAPI
662 KiSystemStartup(
663 IN PLOADER_PARAMETER_BLOCK LoaderBlock
664 );
665
666 BOOLEAN
667 NTAPI
668 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
669
670 VOID
671 NTAPI
672 KiMoveApcState(
673 PKAPC_STATE OldState,
674 PKAPC_STATE NewState
675 );
676
677 VOID
678 NTAPI
679 KiAddProfileEvent(
680 KPROFILE_SOURCE Source,
681 ULONG Pc
682 );
683
684 VOID
685 NTAPI
686 KiDispatchException(
687 PEXCEPTION_RECORD ExceptionRecord,
688 PKEXCEPTION_FRAME ExceptionFrame,
689 PKTRAP_FRAME Tf,
690 KPROCESSOR_MODE PreviousMode,
691 BOOLEAN SearchFrames
692 );
693
694 VOID
695 NTAPI
696 KeTrapFrameToContext(
697 IN PKTRAP_FRAME TrapFrame,
698 IN PKEXCEPTION_FRAME ExceptionFrame,
699 IN OUT PCONTEXT Context
700 );
701
702 VOID
703 NTAPI
704 KeBugCheckWithTf(
705 ULONG BugCheckCode,
706 ULONG BugCheckParameter1,
707 ULONG BugCheckParameter2,
708 ULONG BugCheckParameter3,
709 ULONG BugCheckParameter4,
710 PKTRAP_FRAME Tf
711 );
712
713 VOID
714 NTAPI
715 KeFlushCurrentTb(VOID);
716
717 VOID
718 NTAPI
719 KeRosDumpStackFrames(
720 PULONG Frame,
721 ULONG FrameCount
722 );
723
724 VOID
725 NTAPI
726 KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
727
728 ULONG
729 NTAPI
730 KeV86Exception(
731 ULONG ExceptionNr,
732 PKTRAP_FRAME Tf,
733 ULONG address
734 );
735
736 VOID
737 NTAPI
738 KiStartUnexpectedRange(
739 VOID
740 );
741
742 VOID
743 NTAPI
744 KiEndUnexpectedRange(
745 VOID
746 );
747
748 VOID
749 NTAPI
750 KiInterruptDispatch(
751 VOID
752 );
753
754 VOID
755 NTAPI
756 KiChainedDispatch(
757 VOID
758 );
759
760 VOID
761 NTAPI
762 Ki386AdjustEsp0(
763 IN PKTRAP_FRAME TrapFrame
764 );
765
766 VOID
767 NTAPI
768 Ki386SetupAndExitToV86Mode(
769 OUT PTEB VdmTeb
770 );
771
772 VOID
773 NTAPI
774 KeI386VdmInitialize(
775 VOID
776 );
777
778 VOID
779 NTAPI
780 KiInitializeMachineType(
781 VOID
782 );
783
784 VOID
785 NTAPI
786 KiFlushNPXState(
787 IN FLOATING_SAVE_AREA *SaveArea
788 );
789
790 VOID
791 NTAPI
792 KiInitSpinLocks(
793 IN PKPRCB Prcb,
794 IN CCHAR Number
795 );
796
797 LARGE_INTEGER
798 NTAPI
799 KiComputeReciprocal(
800 IN LONG Divisor,
801 OUT PUCHAR Shift
802 );
803
804 VOID
805 NTAPI
806 KiInitSystem(
807 VOID
808 );
809
810 VOID
811 FASTCALL
812 KiInsertQueueApc(
813 IN PKAPC Apc,
814 IN KPRIORITY PriorityBoost
815 );
816
817 NTSTATUS
818 NTAPI
819 KiCallUserMode(
820 IN PVOID *OutputBuffer,
821 IN PULONG OutputLength
822 );
823
824 PULONG
825 NTAPI
826 KiGetUserModeStackAddress(
827 VOID
828 );
829
830 ULONG_PTR
831 NTAPI
832 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
833
834 VOID
835 NTAPI
836 KiInitializePAT(VOID);
837
838 VOID
839 NTAPI
840 KiInitializeMTRR(IN BOOLEAN FinalCpu);
841
842 VOID
843 NTAPI
844 KiAmdK6InitializeMTRR(VOID);
845
846 VOID
847 NTAPI
848 KiRestoreFastSyscallReturnState(VOID);
849
850 ULONG_PTR
851 NTAPI
852 Ki386EnableDE(IN ULONG_PTR Context);
853
854 ULONG_PTR
855 NTAPI
856 Ki386EnableFxsr(IN ULONG_PTR Context);
857
858 ULONG_PTR
859 NTAPI
860 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
861
862 VOID
863 NTAPI
864 KiInitMachineDependent(VOID);
865
866 VOID
867 NTAPI
868 KiI386PentiumLockErrataFixup(VOID);
869
870 VOID
871 WRMSR(
872 IN ULONG Register,
873 IN LONGLONG Value
874 );
875
876 #include "ke_x.h"
877
878 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */