- Fix __rdtsc so it's considered volatile by GCC instead of caching 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 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 _KI_SAMPLE_MAP
41 {
42 LARGE_INTEGER PerfStart;
43 LARGE_INTEGER PerfEnd;
44 LONGLONG PerfDelta;
45 LARGE_INTEGER PerfFreq;
46 LONGLONG TSCStart;
47 LONGLONG TSCEnd;
48 LONGLONG TSCDelta;
49 ULONG MHz;
50 } KI_SAMPLE_MAP, *PKI_SAMPLE_MAP;
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 ULONG_PTR MmFreeLdrFirstKrnlPhysAddr;
71 extern ULONG_PTR MmFreeLdrLastKrnlPhysAddr;
72 extern ULONG_PTR MmFreeLdrLastKernelAddress;
73
74 extern PVOID KeUserApcDispatcher;
75 extern PVOID KeUserCallbackDispatcher;
76 extern PVOID KeUserExceptionDispatcher;
77 extern PVOID KeRaiseUserExceptionDispatcher;
78 extern LARGE_INTEGER KeBootTime;
79 extern ULONG KeI386NpxPresent;
80 extern ULONG KeI386XMMIPresent;
81 extern ULONG KeI386FxsrPresent;
82 extern ULONG KiMXCsrMask;
83 extern ULONG KeI386CpuType;
84 extern ULONG KeI386CpuStep;
85 extern ULONG KeProcessorArchitecture;
86 extern ULONG KeProcessorLevel;
87 extern ULONG KeProcessorRevision;
88 extern ULONG KeFeatureBits;
89 extern ULONG Ke386GlobalPagesEnabled;
90 extern BOOLEAN KiI386PentiumLockErrataPresent;
91 extern KNODE KiNode0;
92 extern PKNODE KeNodeBlock[1];
93 extern UCHAR KeNumberNodes;
94 extern UCHAR KeProcessNodeSeed;
95 extern ETHREAD KiInitialThread;
96 extern EPROCESS KiInitialProcess;
97 extern ULONG KiInterruptTemplate[KINTERRUPT_DISPATCH_CODES];
98 extern PULONG KiInterruptTemplateObject;
99 extern PULONG KiInterruptTemplateDispatch;
100 extern PULONG KiInterruptTemplate2ndDispatch;
101 extern ULONG KiUnexpectedEntrySize;
102 extern PVOID Ki386IopmSaveArea;
103 extern ULONG KeI386EFlagsAndMaskV86;
104 extern ULONG KeI386EFlagsOrMaskV86;
105 extern BOOLEAN KeI386VirtualIntExtensions;
106 extern KIDTENTRY KiIdt[];
107 extern KGDTENTRY KiBootGdt[];
108 extern KDESCRIPTOR KiGdtDescriptor;
109 extern KDESCRIPTOR KiIdtDescriptor;
110 extern KTSS KiBootTss;
111 extern UCHAR P0BootStack[];
112 extern UCHAR KiDoubleFaultStack[];
113 extern FAST_MUTEX KernelAddressSpaceLock;
114 extern ULONG KiMaximumDpcQueueDepth;
115 extern ULONG KiMinimumDpcRate;
116 extern ULONG KiAdjustDpcThreshold;
117 extern ULONG KiIdealDpcRate;
118 extern BOOLEAN KeThreadDpcEnable;
119 extern LARGE_INTEGER KiTimeIncrementReciprocal;
120 extern UCHAR KiTimeIncrementShiftCount;
121 extern ULONG KiTimeLimitIsrMicroseconds;
122 extern ULONG KiServiceLimit;
123 extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead;
124 extern KSPIN_LOCK BugCheckCallbackLock;
125 extern KDPC KiExpireTimerDpc;
126 extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
127 extern LIST_ENTRY KiTimerListHead;
128 extern FAST_MUTEX KiGenericCallDpcMutex;
129 extern LIST_ENTRY KiProfileListHead, KiProfileSourceListHead;
130 extern KSPIN_LOCK KiProfileLock;
131 extern LIST_ENTRY KiProcessListHead;
132 extern LIST_ENTRY KiProcessInSwapListHead, KiProcessOutSwapListHead;
133 extern LIST_ENTRY KiStackInSwapListHead;
134 extern KEVENT KiSwapEvent;
135 extern PKPRCB KiProcessorBlock[];
136 extern ULONG KiMask32Array[MAXIMUM_PRIORITY];
137 extern ULONG KiIdleSummary;
138 extern VOID KiTrap8(VOID);
139 extern VOID KiTrap2(VOID);
140 extern VOID KiFastCallEntry(VOID);
141 extern PVOID KeUserApcDispatcher;
142 extern PVOID KeUserCallbackDispatcher;
143 extern PVOID KeUserExceptionDispatcher;
144 extern PVOID KeRaiseUserExceptionDispatcher;
145 extern UCHAR KiDebugRegisterTrapOffsets[9];
146 extern UCHAR KiDebugRegisterContextOffsets[9];
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 FASTCALL
239 KiSetAffinityThread(
240 IN PKTHREAD Thread,
241 IN KAFFINITY Affinity
242 );
243
244 PKTHREAD
245 FASTCALL
246 KiSelectNextThread(
247 IN PKPRCB Prcb
248 );
249
250 VOID
251 NTAPI
252 CPUID(
253 OUT ULONG CpuInfo[4],
254 IN ULONG InfoType
255 );
256
257 /* gmutex.c ********************************************************************/
258
259 VOID
260 FASTCALL
261 KiAcquireGuardedMutexContented(PKGUARDED_MUTEX GuardedMutex);
262
263 /* gate.c **********************************************************************/
264
265 VOID
266 FASTCALL
267 KeInitializeGate(PKGATE Gate);
268
269 VOID
270 FASTCALL
271 KeSignalGateBoostPriority(PKGATE Gate);
272
273 VOID
274 FASTCALL
275 KeWaitForGate(
276 PKGATE Gate,
277 KWAIT_REASON WaitReason,
278 KPROCESSOR_MODE WaitMode
279 );
280
281 /* ipi.c ********************************************************************/
282
283 VOID
284 NTAPI
285 KiIpiSendRequest(
286 KAFFINITY TargetSet,
287 ULONG IpiRequest
288 );
289
290 /* next file ***************************************************************/
291
292 UCHAR
293 NTAPI
294 KeFindNextRightSetAffinity(
295 IN UCHAR Number,
296 IN ULONG Set
297 );
298
299 VOID
300 NTAPI
301 DbgBreakPointNoBugCheck(VOID);
302
303 VOID
304 NTAPI
305 KeInitializeProfile(
306 struct _KPROFILE* Profile,
307 struct _KPROCESS* Process,
308 PVOID ImageBase,
309 ULONG ImageSize,
310 ULONG BucketSize,
311 KPROFILE_SOURCE ProfileSource,
312 KAFFINITY Affinity
313 );
314
315 VOID
316 NTAPI
317 KeStartProfile(
318 struct _KPROFILE* Profile,
319 PVOID Buffer
320 );
321
322 BOOLEAN
323 NTAPI
324 KeStopProfile(struct _KPROFILE* Profile);
325
326 ULONG
327 NTAPI
328 KeQueryIntervalProfile(KPROFILE_SOURCE ProfileSource);
329
330 VOID
331 NTAPI
332 KeSetIntervalProfile(
333 KPROFILE_SOURCE ProfileSource,
334 ULONG Interval
335 );
336
337 VOID
338 NTAPI
339 KeProfileInterrupt(
340 PKTRAP_FRAME TrapFrame
341 );
342
343 VOID
344 NTAPI
345 KeProfileInterruptWithSource(
346 IN PKTRAP_FRAME TrapFrame,
347 IN KPROFILE_SOURCE Source
348 );
349
350 BOOLEAN
351 NTAPI
352 KiRosPrintAddress(PVOID Address);
353
354 VOID
355 NTAPI
356 KeUpdateRunTime(
357 PKTRAP_FRAME TrapFrame,
358 KIRQL Irql
359 );
360
361 VOID
362 NTAPI
363 KiExpireTimers(
364 PKDPC Dpc,
365 PVOID DeferredContext,
366 PVOID SystemArgument1,
367 PVOID SystemArgument2
368 );
369
370 VOID
371 NTAPI
372 KeInitializeThread(
373 IN PKPROCESS Process,
374 IN OUT PKTHREAD Thread,
375 IN PKSYSTEM_ROUTINE SystemRoutine,
376 IN PKSTART_ROUTINE StartRoutine,
377 IN PVOID StartContext,
378 IN PCONTEXT Context,
379 IN PVOID Teb,
380 IN PVOID KernelStack
381 );
382
383 VOID
384 NTAPI
385 KeUninitThread(
386 IN PKTHREAD Thread
387 );
388
389 NTSTATUS
390 NTAPI
391 KeInitThread(
392 IN OUT PKTHREAD Thread,
393 IN PVOID KernelStack,
394 IN PKSYSTEM_ROUTINE SystemRoutine,
395 IN PKSTART_ROUTINE StartRoutine,
396 IN PVOID StartContext,
397 IN PCONTEXT Context,
398 IN PVOID Teb,
399 IN PKPROCESS Process
400 );
401
402 VOID
403 NTAPI
404 KeStartThread(
405 IN OUT PKTHREAD Thread
406 );
407
408 BOOLEAN
409 NTAPI
410 KeAlertThread(
411 IN PKTHREAD Thread,
412 IN KPROCESSOR_MODE AlertMode
413 );
414
415 ULONG
416 NTAPI
417 KeAlertResumeThread(
418 IN PKTHREAD Thread
419 );
420
421 ULONG
422 NTAPI
423 KeResumeThread(
424 IN PKTHREAD Thread
425 );
426
427 PVOID
428 NTAPI
429 KeSwitchKernelStack(
430 IN PVOID StackBase,
431 IN PVOID StackLimit
432 );
433
434 VOID
435 NTAPI
436 KeRundownThread(VOID);
437
438 NTSTATUS
439 NTAPI
440 KeReleaseThread(PKTHREAD Thread);
441
442 VOID
443 NTAPI
444 KiSuspendRundown(
445 IN PKAPC Apc
446 );
447
448 VOID
449 NTAPI
450 KiSuspendNop(
451 IN PKAPC Apc,
452 IN PKNORMAL_ROUTINE *NormalRoutine,
453 IN PVOID *NormalContext,
454 IN PVOID *SystemArgument1,
455 IN PVOID *SystemArgument2
456 );
457
458 VOID
459 NTAPI
460 KiSuspendThread(
461 IN PVOID NormalContext,
462 IN PVOID SystemArgument1,
463 IN PVOID SystemArgument2
464 );
465
466 LONG
467 NTAPI
468 KeQueryBasePriorityThread(IN PKTHREAD Thread);
469
470 VOID
471 FASTCALL
472 KiSetPriorityThread(
473 IN PKTHREAD Thread,
474 IN KPRIORITY Priority
475 );
476
477 BOOLEAN
478 NTAPI
479 KiDispatcherObjectWake(
480 DISPATCHER_HEADER* hdr,
481 KPRIORITY increment
482 );
483
484 VOID
485 FASTCALL
486 KiUnlinkThread(
487 IN PKTHREAD Thread,
488 IN NTSTATUS WaitStatus
489 );
490
491 VOID
492 NTAPI
493 KeExpireTimers(
494 PKDPC Apc,
495 PVOID Arg1,
496 PVOID Arg2,
497 PVOID Arg3
498 );
499
500 VOID
501 NTAPI
502 KeDumpStackFrames(PULONG Frame);
503
504 BOOLEAN
505 NTAPI
506 KiTestAlert(VOID);
507
508 VOID
509 FASTCALL
510 KiUnwaitThread(
511 IN PKTHREAD Thread,
512 IN NTSTATUS WaitStatus,
513 IN KPRIORITY Increment
514 );
515
516 VOID
517 NTAPI
518 KeInitializeProcess(
519 struct _KPROCESS *Process,
520 KPRIORITY Priority,
521 KAFFINITY Affinity,
522 PLARGE_INTEGER DirectoryTableBase,
523 IN BOOLEAN Enable
524 );
525
526 VOID
527 NTAPI
528 KeSetQuantumProcess(
529 IN PKPROCESS Process,
530 IN UCHAR Quantum
531 );
532
533 KPRIORITY
534 NTAPI
535 KeSetPriorityAndQuantumProcess(
536 IN PKPROCESS Process,
537 IN KPRIORITY Priority,
538 IN UCHAR Quantum OPTIONAL
539 );
540
541 ULONG
542 NTAPI
543 KeForceResumeThread(IN PKTHREAD Thread);
544
545 VOID
546 NTAPI
547 KeThawAllThreads(
548 VOID
549 );
550
551 VOID
552 NTAPI
553 KeFreezeAllThreads(
554 VOID
555 );
556
557 BOOLEAN
558 NTAPI
559 KeDisableThreadApcQueueing(IN PKTHREAD Thread);
560
561 BOOLEAN
562 NTAPI
563 KiInsertTimer(
564 PKTIMER Timer,
565 LARGE_INTEGER DueTime
566 );
567
568 VOID
569 FASTCALL
570 KiWaitTest(
571 PVOID Object,
572 KPRIORITY Increment
573 );
574
575 VOID
576 NTAPI
577 KeContextToTrapFrame(
578 PCONTEXT Context,
579 PKEXCEPTION_FRAME ExeptionFrame,
580 PKTRAP_FRAME TrapFrame,
581 ULONG ContextFlags,
582 KPROCESSOR_MODE PreviousMode
583 );
584
585 VOID
586 NTAPI
587 KiCheckForKernelApcDelivery(VOID);
588
589 LONG
590 NTAPI
591 KiInsertQueue(
592 IN PKQUEUE Queue,
593 IN PLIST_ENTRY Entry,
594 BOOLEAN Head
595 );
596
597 ULONG
598 NTAPI
599 KeSetProcess(
600 struct _KPROCESS* Process,
601 KPRIORITY Increment,
602 BOOLEAN InWait
603 );
604
605 VOID
606 NTAPI
607 KeInitializeEventPair(PKEVENT_PAIR EventPair);
608
609 VOID
610 NTAPI
611 KiInitializeUserApc(
612 IN PKEXCEPTION_FRAME Reserved,
613 IN PKTRAP_FRAME TrapFrame,
614 IN PKNORMAL_ROUTINE NormalRoutine,
615 IN PVOID NormalContext,
616 IN PVOID SystemArgument1,
617 IN PVOID SystemArgument2
618 );
619
620 PLIST_ENTRY
621 NTAPI
622 KeFlushQueueApc(
623 IN PKTHREAD Thread,
624 IN KPROCESSOR_MODE PreviousMode
625 );
626
627 VOID
628 NTAPI
629 KiAttachProcess(
630 struct _KTHREAD *Thread,
631 struct _KPROCESS *Process,
632 PKLOCK_QUEUE_HANDLE ApcLock,
633 struct _KAPC_STATE *SavedApcState
634 );
635
636 VOID
637 NTAPI
638 KiSwapProcess(
639 struct _KPROCESS *NewProcess,
640 struct _KPROCESS *OldProcess
641 );
642
643 BOOLEAN
644 NTAPI
645 KeTestAlertThread(IN KPROCESSOR_MODE AlertMode);
646
647 BOOLEAN
648 NTAPI
649 KeRemoveQueueApc(PKAPC Apc);
650
651 VOID
652 FASTCALL
653 KiActivateWaiterQueue(IN PKQUEUE Queue);
654
655 /* INITIALIZATION FUNCTIONS *************************************************/
656
657 BOOLEAN
658 NTAPI
659 KeInitSystem(VOID);
660
661 VOID
662 NTAPI
663 KeInitExceptions(VOID);
664
665 VOID
666 NTAPI
667 KeInitInterrupts(VOID);
668
669 VOID
670 NTAPI
671 KiInitializeBugCheck(VOID);
672
673 VOID
674 NTAPI
675 KiInitializeSystemClock(VOID);
676
677 VOID
678 NTAPI
679 KiSystemStartup(
680 IN PLOADER_PARAMETER_BLOCK LoaderBlock
681 );
682
683 BOOLEAN
684 NTAPI
685 KiDeliverUserApc(PKTRAP_FRAME TrapFrame);
686
687 VOID
688 NTAPI
689 KiMoveApcState(
690 PKAPC_STATE OldState,
691 PKAPC_STATE NewState
692 );
693
694 VOID
695 NTAPI
696 KiAddProfileEvent(
697 KPROFILE_SOURCE Source,
698 ULONG Pc
699 );
700
701 VOID
702 NTAPI
703 KiDispatchException(
704 PEXCEPTION_RECORD ExceptionRecord,
705 PKEXCEPTION_FRAME ExceptionFrame,
706 PKTRAP_FRAME Tf,
707 KPROCESSOR_MODE PreviousMode,
708 BOOLEAN SearchFrames
709 );
710
711 VOID
712 NTAPI
713 KeTrapFrameToContext(
714 IN PKTRAP_FRAME TrapFrame,
715 IN PKEXCEPTION_FRAME ExceptionFrame,
716 IN OUT PCONTEXT Context
717 );
718
719 VOID
720 NTAPI
721 KeBugCheckWithTf(
722 ULONG BugCheckCode,
723 ULONG BugCheckParameter1,
724 ULONG BugCheckParameter2,
725 ULONG BugCheckParameter3,
726 ULONG BugCheckParameter4,
727 PKTRAP_FRAME Tf
728 );
729
730 VOID
731 NTAPI
732 KeFlushCurrentTb(VOID);
733
734 VOID
735 NTAPI
736 KeRosDumpStackFrames(
737 PULONG Frame,
738 ULONG FrameCount
739 );
740
741 VOID
742 NTAPI
743 KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
744
745 ULONG
746 NTAPI
747 KeV86Exception(
748 ULONG ExceptionNr,
749 PKTRAP_FRAME Tf,
750 ULONG address
751 );
752
753 VOID
754 NTAPI
755 KiStartUnexpectedRange(
756 VOID
757 );
758
759 VOID
760 NTAPI
761 KiEndUnexpectedRange(
762 VOID
763 );
764
765 VOID
766 NTAPI
767 KiInterruptDispatch(
768 VOID
769 );
770
771 VOID
772 NTAPI
773 KiChainedDispatch(
774 VOID
775 );
776
777 VOID
778 NTAPI
779 Ki386AdjustEsp0(
780 IN PKTRAP_FRAME TrapFrame
781 );
782
783 VOID
784 NTAPI
785 Ki386SetupAndExitToV86Mode(
786 OUT PTEB VdmTeb
787 );
788
789 VOID
790 NTAPI
791 KeI386VdmInitialize(
792 VOID
793 );
794
795 VOID
796 NTAPI
797 KiInitializeMachineType(
798 VOID
799 );
800
801 VOID
802 NTAPI
803 KiFlushNPXState(
804 IN FLOATING_SAVE_AREA *SaveArea
805 );
806
807 VOID
808 NTAPI
809 KiInitSpinLocks(
810 IN PKPRCB Prcb,
811 IN CCHAR Number
812 );
813
814 LARGE_INTEGER
815 NTAPI
816 KiComputeReciprocal(
817 IN LONG Divisor,
818 OUT PUCHAR Shift
819 );
820
821 VOID
822 NTAPI
823 KiInitSystem(
824 VOID
825 );
826
827 VOID
828 FASTCALL
829 KiInsertQueueApc(
830 IN PKAPC Apc,
831 IN KPRIORITY PriorityBoost
832 );
833
834 NTSTATUS
835 NTAPI
836 KiCallUserMode(
837 IN PVOID *OutputBuffer,
838 IN PULONG OutputLength
839 );
840
841 PULONG
842 NTAPI
843 KiGetUserModeStackAddress(
844 VOID
845 );
846
847 ULONG_PTR
848 NTAPI
849 Ki386EnableGlobalPage(IN volatile ULONG_PTR Context);
850
851 VOID
852 NTAPI
853 KiInitializePAT(VOID);
854
855 VOID
856 NTAPI
857 KiInitializeMTRR(IN BOOLEAN FinalCpu);
858
859 VOID
860 NTAPI
861 KiAmdK6InitializeMTRR(VOID);
862
863 VOID
864 NTAPI
865 KiRestoreFastSyscallReturnState(VOID);
866
867 ULONG_PTR
868 NTAPI
869 Ki386EnableDE(IN ULONG_PTR Context);
870
871 ULONG_PTR
872 NTAPI
873 Ki386EnableFxsr(IN ULONG_PTR Context);
874
875 ULONG_PTR
876 NTAPI
877 Ki386EnableXMMIExceptions(IN ULONG_PTR Context);
878
879 VOID
880 NTAPI
881 KiInitMachineDependent(VOID);
882
883 VOID
884 NTAPI
885 KiI386PentiumLockErrataFixup(VOID);
886
887 VOID
888 WRMSR(
889 IN ULONG Register,
890 IN LONGLONG Value
891 );
892
893 #include "ke_x.h"
894
895 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */