- Add KF_XMMI64 feature flag for SSE2 and detect it.
[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 /* Cached modules from the loader block */
22 typedef enum _CACHED_MODULE_TYPE
23 {
24 AnsiCodepage,
25 OemCodepage,
26 UnicodeCasemap,
27 SystemRegistry,
28 HardwareRegistry,
29 MaximumCachedModuleType,
30 } CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE;
31 extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
32
33 typedef enum _CONNECT_TYPE
34 {
35 NoConnect,
36 NormalConnect,
37 ChainConnect,
38 UnknownConnect
39 } CONNECT_TYPE, *PCONNECT_TYPE;
40
41 typedef struct _DISPATCH_INFO
42 {
43 CONNECT_TYPE Type;
44 PKINTERRUPT Interrupt;
45 PKINTERRUPT_ROUTINE NoDispatch;
46 PKINTERRUPT_ROUTINE InterruptDispatch;
47 PKINTERRUPT_ROUTINE FloatingDispatch;
48 PKINTERRUPT_ROUTINE ChainedDispatch;
49 PKINTERRUPT_ROUTINE *FlatDispatch;
50 } DISPATCH_INFO, *PDISPATCH_INFO;
51
52 typedef struct _KTIMER_TABLE_ENTRY
53 {
54 LIST_ENTRY Entry;
55 ULARGE_INTEGER Time;
56 } KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY;
57
58 typedef PCHAR
59 (NTAPI *PKE_BUGCHECK_UNICODE_TO_ANSI)(
60 IN PUNICODE_STRING Unicode,
61 IN PCHAR Ansi,
62 IN ULONG Length
63 );
64
65 struct _KIRQ_TRAPFRAME;
66 struct _KPCR;
67 struct _KPRCB;
68 struct _KEXCEPTION_FRAME;
69
70 extern ADDRESS_RANGE KeMemoryMap[64];
71 extern ULONG KeMemoryMapRangeCount;
72 extern ULONG_PTR FirstKrnlPhysAddr;
73 extern ULONG_PTR LastKrnlPhysAddr;
74 extern ULONG_PTR LastKernelAddress;
75
76 extern PVOID KeUserApcDispatcher;
77 extern PVOID KeUserCallbackDispatcher;
78 extern PVOID KeUserExceptionDispatcher;
79 extern PVOID KeRaiseUserExceptionDispatcher;
80 extern LARGE_INTEGER SystemBootTime;
81 extern ULONG_PTR KERNEL_BASE;
82 extern ULONG KeI386NpxPresent;
83 extern ULONG KeI386XMMIPresent;
84 extern ULONG KeI386FxsrPresent;
85 extern ULONG KiMXCsrMask;
86 extern ULONG KeI386CpuType;
87 extern ULONG KeI386CpuStep;
88 extern ULONG KeProcessorArchitecture;
89 extern ULONG KeProcessorLevel;
90 extern ULONG KeProcessorRevision;
91 extern ULONG KeFeatureBits;
92 extern ULONG Ke386GlobalPagesEnabled;
93 extern BOOLEAN KiI386PentiumLockErrataPresent;
94 extern KNODE KiNode0;
95 extern PKNODE KeNodeBlock[1];
96 extern UCHAR KeNumberNodes;
97 extern UCHAR KeProcessNodeSeed;
98 extern ETHREAD KiInitialThread;
99 extern EPROCESS KiInitialProcess;
100 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
101 extern PULONG KiInterruptTemplateObject;
102 extern PULONG KiInterruptTemplateDispatch;
103 extern PULONG KiInterruptTemplate2ndDispatch;
104 extern ULONG KiUnexpectedEntrySize;
105 extern PVOID Ki386IopmSaveArea;
106 extern ULONG KeI386EFlagsAndMaskV86;
107 extern ULONG KeI386EFlagsOrMaskV86;
108 extern BOOLEAN KeI386VirtualIntExtensions;
109 extern KIDTENTRY KiIdt[];
110 extern KGDTENTRY KiBootGdt[];
111 extern KDESCRIPTOR KiGdtDescriptor;
112 extern KDESCRIPTOR KiIdtDescriptor;
113 extern KTSS KiBootTss;
114 extern UCHAR P0BootStack[];
115 extern UCHAR KiDoubleFaultStack[];
116 extern FAST_MUTEX KernelAddressSpaceLock;
117 extern ULONG KiMaximumDpcQueueDepth;
118 extern ULONG KiMinimumDpcRate;
119 extern ULONG KiAdjustDpcThreshold;
120 extern ULONG KiIdealDpcRate;
121 extern BOOLEAN KeThreadDpcEnable;
122 extern LARGE_INTEGER KiTimeIncrementReciprocal;
123 extern UCHAR KiTimeIncrementShiftCount;
124 extern ULONG KiTimeLimitIsrMicroseconds;
125 extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
126 extern KSPIN_LOCK BugCheckCallbackLock;
127 extern KDPC KiExpireTimerDpc;
128 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
129 extern LIST_ENTRY KiTimerListHead;
130 extern KMUTEX KiGenericCallDpcMutex;
131 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
132 extern KSPIN_LOCK KiProfileLock;
133 extern LIST_ENTRY KiProcessListHead;
134 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
135 extern LIST_ENTRY KiStackInSwapListHead;
136 extern KEVENT KiSwapEvent;
137 extern PKPRCB KiProcessorBlock[];
138 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
139 extern ULONG KiIdleSummary;
140 extern VOID KiTrap8(VOID);
141 extern VOID KiTrap2(VOID);
142 extern VOID KiFastCallEntry(VOID);
143 extern PVOID KeUserApcDispatcher;
144 extern PVOID KeUserCallbackDispatcher;
145 extern PVOID KeUserExceptionDispatcher;
146 extern PVOID KeRaiseUserExceptionDispatcher;
147
148 /* MACROS *************************************************************************/
149
150 #define AFFINITY_MASK(Id) KiMask32Array[Id]
151 #define PRIORITY_MASK(Id) KiMask32Array[Id]
152
153 /* The following macro initializes a dispatcher object's header */
154 #define KeInitializeDispatcherHeader(Header, t, s, State) \
155 { \
156 (Header)->Type = t; \
157 (Header)->Absolute = 0; \
158 (Header)->Inserted = 0; \
159 (Header)->Size = s; \
160 (Header)->SignalState = State; \
161 InitializeListHead(&((Header)->WaitListHead)); \
162 }
163
164 #define KEBUGCHECKWITHTF(a,b,c,d,e,f) \
165 DbgPrint("KeBugCheckWithTf at %s:%i\n",__FILE__,__LINE__), \
166 KeBugCheckWithTf(a,b,c,d,e,f)
167
168 /* Tells us if the Timer or Event is a Syncronization or Notification Object */
169 #define TIMER_OR_EVENT_TYPE 0x7L
170
171 /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */
172 #define TIMER_WAIT_BLOCK 0x3L
173
174 /* IOPM Definitions */
175 #define IO_ACCESS_MAP_NONE 0
176 #define IOPM_OFFSET FIELD_OFFSET(KTSS, IoMaps[0].IoMap)
177 #define KiComputeIopmOffset(MapNumber) \
178 (MapNumber == IO_ACCESS_MAP_NONE) ? \
179 (USHORT)(sizeof(KTSS)) : \
180 (USHORT)(FIELD_OFFSET(KTSS, IoMaps[MapNumber-1].IoMap))
181
182 #define SIZE_OF_FX_REGISTERS 32
183
184 /* INTERNAL KERNEL FUNCTIONS ************************************************/
185
186 /* Readies a Thread for Execution. */
187 BOOLEAN
188 NTAPI
189 KiDispatchThreadNoLock(ULONG NewThreadStatus);
190
191 /* Readies a Thread for Execution. */
192 VOID
193 NTAPI
194 KiDispatchThread(ULONG NewThreadStatus);
195
196 /* Finds a new thread to run */
197 NTSTATUS
198 FASTCALL
199 KiSwapThread(
200 IN PKTHREAD Thread,
201 IN PKPRCB Prcb
202 );
203
204 VOID
205 NTAPI
206 KeReadyThread(
207 IN PKTHREAD Thread
208 );
209
210 VOID
211 NTAPI
212 KiReadyThread(IN PKTHREAD Thread);
213
214 NTSTATUS
215 NTAPI
216 KeSuspendThread(PKTHREAD Thread);
217
218 BOOLEAN
219 FASTCALL
220 KiSwapContext(
221 IN PKTHREAD CurrentThread,
222 IN PKTHREAD NewThread
223 );
224
225 VOID
226 NTAPI
227 KiAdjustQuantumThread(IN PKTHREAD Thread);
228
229 VOID
230 FASTCALL
231 KiExitDispatcher(KIRQL OldIrql);
232
233 VOID
234 NTAPI
235 KiDeferredReadyThread(IN PKTHREAD Thread);
236
237 KAFFINITY
238 NTAPI
239 KiSetAffinityThread(
240 IN PKTHREAD Thread,
241 IN KAFFINITY Affinity,
242 IN PBOOLEAN Released // hack
243 );
244
245 PKTHREAD
246 NTAPI
247 KiSelectNextThread(
248 IN PKPRCB Prcb
249 );
250
251 /* gmutex.c ********************************************************************/
252
253 VOID
254 FASTCALL
255 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
256
257 /* gate.c **********************************************************************/
258
259 VOID
260 FASTCALL
261 KeInitializeGate(PKGATE Gate);
262
263 VOID
264 FASTCALL
265 KeSignalGateBoostPriority(PKGATE Gate);
266
267 VOID
268 FASTCALL
269 KeWaitForGate(
270 PKGATE Gate,
271 KWAIT_REASON WaitReason,
272 KPROCESSOR_MODE WaitMode
273 );
274
275 /* ipi.c ********************************************************************/
276
277 VOID
278 NTAPI
279 KiIpiSendRequest(
280 KAFFINITY TargetSet,
281 ULONG IpiRequest
282 );
283
284 /* next file ***************************************************************/
285
286 UCHAR
287 NTAPI
288 KeFindNextRightSetAffinity(
289 IN UCHAR Number,
290 IN ULONG Set
291 );
292
293 VOID
294 NTAPI
295 DbgBreakPointNoBugCheck(VOID);
296
297 VOID
298 NTAPI
299 KeInitializeProfile(
300 struct _KPROFILE* Profile,
301 struct _KPROCESS* Process,
302 PVOID ImageBase,
303 ULONG ImageSize,
304 ULONG BucketSize,
305 KPROFILE_SOURCE ProfileSource,
306 KAFFINITY Affinity
307 );
308
309 VOID
310 NTAPI
311 KeStartProfile(
312 struct _KPROFILE* Profile,
313 PVOID Buffer
314 );
315
316 BOOLEAN
317 NTAPI
318 KeStopProfile(struct _KPROFILE* Profile);
319
320 ULONG
321 NTAPI
322 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
323
324 VOID
325 NTAPI
326 KeSetIntervalProfile(
327 KPROFILE_SOURCE ProfileSource,
328 ULONG Interval
329 );
330
331 VOID
332 NTAPI
333 KeProfileInterrupt(
334 PKTRAP_FRAME TrapFrame
335 );
336
337 VOID
338 NTAPI
339 KeProfileInterruptWithSource(
340 IN PKTRAP_FRAME TrapFrame,
341 IN KPROFILE_SOURCE Source
342 );
343
344 BOOLEAN
345 NTAPI
346 KiRosPrintAddress(PVOID Address);
347
348 VOID
349 NTAPI
350 KeUpdateRunTime(
351 PKTRAP_FRAME TrapFrame,
352 KIRQL Irql
353 );
354
355 VOID
356 NTAPI
357 KiExpireTimers(
358 PKDPC Dpc,
359 PVOID DeferredContext,
360 PVOID SystemArgument1,
361 PVOID SystemArgument2
362 );
363
364 VOID
365 NTAPI
366 KeInitializeThread(
367 IN PKPROCESS Process,
368 IN OUT PKTHREAD Thread,
369 IN PKSYSTEM_ROUTINE SystemRoutine,
370 IN PKSTART_ROUTINE StartRoutine,
371 IN PVOID StartContext,
372 IN PCONTEXT Context,
373 IN PVOID Teb,
374 IN PVOID KernelStack
375 );
376
377 VOID
378 NTAPI
379 KeUninitThread(
380 IN PKTHREAD Thread
381 );
382
383 NTSTATUS
384 NTAPI
385 KeInitThread(
386 IN OUT PKTHREAD Thread,
387 IN PVOID KernelStack,
388 IN PKSYSTEM_ROUTINE SystemRoutine,
389 IN PKSTART_ROUTINE StartRoutine,
390 IN PVOID StartContext,
391 IN PCONTEXT Context,
392 IN PVOID Teb,
393 IN PKPROCESS Process
394 );
395
396 VOID
397 NTAPI
398 KeStartThread(
399 IN OUT PKTHREAD Thread
400 );
401
402 BOOLEAN
403 NTAPI
404 KeAlertThread(
405 IN PKTHREAD Thread,
406 IN KPROCESSOR_MODE AlertMode
407 );
408
409 ULONG
410 NTAPI
411 KeAlertResumeThread(
412 IN PKTHREAD Thread
413 );
414
415 ULONG
416 NTAPI
417 KeResumeThread(
418 IN PKTHREAD Thread
419 );
420
421 PVOID
422 NTAPI
423 KeSwitchKernelStack(
424 IN PVOID StackBase,
425 IN PVOID StackLimit
426 );
427
428 VOID
429 NTAPI
430 KeRundownThread(VOID);
431
432 NTSTATUS
433 NTAPI
434 KeReleaseThread(PKTHREAD Thread);
435
436 VOID
437 NTAPI
438 KiSuspendRundown(
439 IN PKAPC Apc
440 );
441
442 VOID
443 NTAPI
444 KiSuspendNop(
445 IN PKAPC Apc,
446 IN PKNORMAL_ROUTINE *NormalRoutine,
447 IN PVOID *NormalContext,
448 IN PVOID *SystemArgument1,
449 IN PVOID *SystemArgument2
450 );
451
452 VOID
453 NTAPI
454 KiSuspendThread(
455 IN PVOID NormalContext,
456 IN PVOID SystemArgument1,
457 IN PVOID SystemArgument2
458 );
459
460 LONG
461 NTAPI
462 KeQueryBasePriorityThread(IN PKTHREAD Thread);
463
464 VOID
465 NTAPI
466 KiSetPriorityThread(
467 IN PKTHREAD Thread,
468 IN KPRIORITY Priority,
469 IN PBOOLEAN Released // hack
470 );
471
472 BOOLEAN
473 NTAPI
474 KiDispatcherObjectWake(
475 DISPATCHER_HEADER* hdr,
476 KPRIORITY increment
477 );
478
479 VOID
480 FASTCALL
481 KiUnlinkThread(
482 IN PKTHREAD Thread,
483 IN NTSTATUS WaitStatus
484 );
485
486 VOID
487 NTAPI
488 KeExpireTimers(
489 PKDPC Apc,
490 PVOID Arg1,
491 PVOID Arg2,
492 PVOID Arg3
493 );
494
495 VOID
496 NTAPI
497 KeDumpStackFrames(PULONG Frame);
498
499 BOOLEAN
500 NTAPI
501 KiTestAlert(VOID);
502
503 VOID
504 FASTCALL
505 KiUnwaitThread(
506 IN PKTHREAD Thread,
507 IN NTSTATUS WaitStatus,
508 IN KPRIORITY Increment
509 );
510
511 VOID
512 NTAPI
513 KeInitializeProcess(
514 struct _KPROCESS *Process,
515 KPRIORITY Priority,
516 KAFFINITY Affinity,
517 PLARGE_INTEGER DirectoryTableBase,
518 IN BOOLEAN Enable
519 );
520
521 VOID
522 NTAPI
523 KeSetQuantumProcess(
524 IN PKPROCESS Process,
525 IN UCHAR Quantum
526 );
527
528 KPRIORITY
529 NTAPI
530 KeSetPriorityAndQuantumProcess(
531 IN PKPROCESS Process,
532 IN KPRIORITY Priority,
533 IN UCHAR Quantum OPTIONAL
534 );
535
536 ULONG
537 NTAPI
538 KeForceResumeThread(IN PKTHREAD Thread);
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 VOID
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 */