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