45 ULONG MXCsrMask = 0xFFBF;
193 KiCpuId(&CpuInfo, 0);
206 KiCpuId(&CpuInfo, 0);
222 PerfFreq.QuadPart + 500000) /
230 if ((CurrentSample->
MHz == CurrentSample[-1].
MHz) ||
231 (CurrentSample->
MHz == CurrentSample[-1].
MHz + 1) ||
232 (CurrentSample->
MHz == CurrentSample[-1].
MHz - 1))
249 TotalMHz += Samples[Sample].
MHz;
252 DPRINT1(
"Sampling CPU frequency failed. Using average of %lu MHz\n", CurrentSample[-1].MHz);
284 Ke386SaveFpuState(FxSaveArea);
305 KeBugCheckEx(MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED,
326 DPRINT1(
"ISR Time Limit not yet supported\n");
346 Pcr->NtTib.StackBase = 0;
347 Pcr->NtTib.StackLimit = 0;
348 Pcr->NtTib.Self =
NULL;
351 Pcr->PrcbData.CurrentThread = IdleThread;
354 Pcr->SelfPcr = (
PKPCR)Pcr;
355 Pcr->Prcb = &Pcr->PrcbData;
362 Pcr->PrcbData.MajorVersion = 1;
363 Pcr->PrcbData.MinorVersion = 1;
366 Pcr->PrcbData.BuildType = 0;
375 Pcr->PrcbData.Number = (
UCHAR)ProcessorNumber;
376 Pcr->PrcbData.SetMember = 1 << ProcessorNumber;
385 Pcr->GDT = (
PVOID)Gdt;
389 Pcr->PrcbData.DpcStack = DpcStack;
392 Pcr->PrcbData.MultiThreadProcessorSet = Pcr->PrcbData.SetMember;
407 ULONG PageDirectory[2];
422 if (Prcb->CpuType == 3)
KeBugCheckEx(UNSUPPORTED_PROCESSOR, 0x386, 0, 0, 0);
458 Prcb->FeatureBits = FeatureBits;
496 (1 << 24 ) | (Prcb->CpuType << 16) | Prcb->CpuStep,
503 Prcb->MultiThreadSetMaster = Prcb;
517 PageDirectory[0] = 0;
518 PageDirectory[1] = 0;
524 InitProcess->QuantumReset =
MAXCHAR;
529 DPRINT1(
"SMP Boot support not yet present\n");
541 InitThread->NextProcessor =
Number;
544 InitThread->Affinity = 1 <<
Number;
546 InitProcess->ActiveProcessors = 1 <<
Number;
566 Prcb->CurrentThread = InitThread;
567 Prcb->NextThread =
NULL;
568 Prcb->IdleThread = InitThread;
588 if (!DpcStack)
KeBugCheckEx(NO_PAGES_AVAILABLE, 1, 0, 0, 0);
589 Prcb->DpcStack = DpcStack;
615 LoaderBlock->Prcb = 0;
631 Ke386GetGlobalDescriptorTable(&GdtDescriptor.
Limit);
705 PointerPte->
Write = 0;
744 InitialStack = LoaderBlock->KernelStack;
745 InitialThread = (
PKTHREAD)LoaderBlock->Thread;
754 if (Cpu)
goto AppCpuInit;
INIT_FUNCTION VOID FASTCALL KiGetMachineBootPointers(IN PKGDTENTRY *Gdt, IN PKIDTENTRY *Idt, IN PKIPCR *Pcr, IN PKTSS *Tss)
VOID KiGetCacheInformation()
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
struct _KGDTENTRY::@2351::@2352 Bytes
INIT_FUNCTION BOOLEAN NTAPI KiIsNpxPresent(VOID)
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
#define KeRaiseIrql(irql, oldIrql)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
BOOLEAN KiI386PentiumLockErrataPresent
#define KeLowerIrql(oldIrql)
FORCEINLINE VOID KiReleasePrcbLock(IN PKPRCB Prcb)
INIT_FUNCTION VOID NTAPI KiSystemStartupBootStack(VOID)
INIT_FUNCTION ULONG_PTR NTAPI Ki386EnableFxsr(IN ULONG_PTR Context)
#define KPCR_PROCESSOR_NUMBER
char * strstr(char *String1, char *String2)
VOID NTAPI KeRevertToUserAffinityThread(VOID)
#define NX_SUPPORT_POLICY_OPTIN
BOOLEAN NTAPI Ki386CreateIdentityMap(IN PLARGE_IDENTITY_MAP IdentityMap, IN PVOID StartPtr, IN ULONG Length)
INIT_FUNCTION VOID NTAPI KiInitMachineDependent(VOID)
#define KPCR_PRCB_SET_MEMBER
void __cdecl _enable(void)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
struct _EPROCESS * PEPROCESS
INIT_FUNCTION VOID NTAPI KiInitializeMTRR(IN BOOLEAN FinalCpu)
#define PF_COMPARE_EXCHANGE_DOUBLE
INIT_FUNCTION VOID NTAPI KiInitializePAT(VOID)
PPC_QUAL unsigned long long __rdtsc(void)
INIT_FUNCTION VOID NTAPI PoInitializePrcb(IN PKPRCB Prcb)
INIT_FUNCTION VOID NTAPI KiInitSpinLocks(IN PKPRCB Prcb, IN CCHAR Number)
#define HalQuerySystemInformation
ULONG KiAdjustDpcThreshold
#define PF_FLOATING_POINT_EMULATED
ULONG KiTimeLimitIsrMicroseconds
VOID NTAPI KeInitializeProcess(struct _KPROCESS *Process, KPRIORITY Priority, KAFFINITY Affinity, PULONG_PTR DirectoryTableBase, IN BOOLEAN Enable)
INIT_FUNCTION VOID FASTCALL Ki386InitializeTss(IN PKTSS Tss, IN PKIDTENTRY Idt, IN PKGDTENTRY Gdt)
VOID NTAPI KeSetSystemAffinityThread(IN KAFFINITY Affinity)
#define NX_SUPPORT_POLICY_ALWAYSON
VOID NTAPI KiInitializePcr(IN PKIPCR Pcr, IN ULONG ProcessorNumber, IN PKTHREAD IdleThread, IN PVOID DpcStack)
INIT_FUNCTION VOID NTAPI KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
struct _KTHREAD * PKTHREAD
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define PF_FLOATING_POINT_PRECISION_ERRATA
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
#define NX_SUPPORT_POLICY_ALWAYSOFF
struct _HARDWARE_PTE * PHARDWARE_PTE
VOID NTAPI HalInitializeProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
__INTRIN_INLINE void __sidt(void *Destination)
#define NX_SUPPORT_POLICY_OPTOUT
BOOLEAN NTAPI KdPollBreakIn(VOID)
NTSTATUS NTAPI KeDelayExecutionThread(IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN PLARGE_INTEGER Interval OPTIONAL)
#define PF_XMMI_INSTRUCTIONS_AVAILABLE
INIT_FUNCTION ULONG_PTR NTAPI Ki386EnableXMMIExceptions(IN ULONG_PTR Context)
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
FORCEINLINE VOID KiAcquirePrcbLock(IN PKPRCB Prcb)
VOID NTAPI Ki386FreeIdentityMap(IN PLARGE_IDENTITY_MAP IdentityMap)
PPC_QUAL unsigned long __readfsdword(const unsigned long Offset)
LARGE_INTEGER KiTimeIncrementReciprocal
UCHAR KiTimeIncrementShiftCount
PLOADER_PARAMETER_BLOCK KeLoaderBlock
ULONG_PTR KiDoubleFaultStack
INIT_FUNCTION ULONG_PTR NTAPI Ki386EnableGlobalPage(IN ULONG_PTR Context)
FORCEINLINE PFX_SAVE_AREA KiGetThreadNpxArea(IN PKTHREAD Thread)
#define InterlockedBitTestAndSet
USHORT KeProcessorArchitecture
USHORT KeProcessorRevision
#define NT_SUCCESS(StatCode)
INIT_FUNCTION ULONG_PTR NTAPI Ki386EnableTargetLargePage(IN ULONG_PTR Context)
static VOID KiMarkPageAsReadOnly(PVOID Address)
INIT_FUNCTION VOID NTAPI ExpInitializeExecutive(IN ULONG Cpu, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
_In_ ULONG _In_ ULONG _In_ ULONG _Out_ PKIRQL _Out_ PKAFFINITY Affinity
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
INIT_FUNCTION VOID NTAPI KiAmdK6InitializeMTRR(VOID)
#define KERNEL_STACK_SIZE
VOID KiInitializeMachineType(VOID)
INIT_FUNCTION VOID NTAPI KiInitSystem(VOID)
ASSERT((InvokeOnSuccess||InvokeOnError||InvokeOnCancel) ?(CompletionRoutine !=NULL) :TRUE)
#define ExAllocatePoolWithTag(hernya, size, tag)
VOID NTAPI KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
VOID KiSwitchToBootStack(IN ULONG_PTR InitialStack)
VOID FASTCALL KiIdleLoop(VOID)
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
KAFFINITY KeActiveProcessors
EPROCESS KiInitialProcess
INIT_FUNCTION VOID NTAPI KiSetCR0Bits(VOID)
#define PROCESSOR_ARCHITECTURE_INTEL
union _KGDTENTRY::@2351 HighWord
#define PCR_MINOR_VERSION
ULONG KiMaximumDpcQueueDepth
INIT_FUNCTION ULONG_PTR NTAPI Ki386EnableDE(IN ULONG_PTR Context)
INIT_FUNCTION LARGE_INTEGER NTAPI KiComputeReciprocal(IN LONG Divisor, OUT PUCHAR Shift)
#define PF_RDTSC_INSTRUCTION_AVAILABLE
#define EXCEPTION_CHAIN_END
INIT_FUNCTION VOID NTAPI KeInitExceptions(VOID)
BOOLEAN NTAPI KdInitSystem(ULONG Reserved, PLOADER_PARAMETER_BLOCK LoaderBlock)
KPRIORITY NTAPI KeSetPriorityThread(IN PKTHREAD Thread, IN KPRIORITY Priority)
VOID NTAPI KeInitializeThread(IN PKPROCESS Process, IN OUT PKTHREAD Thread, IN PKSYSTEM_ROUTINE SystemRoutine, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext, IN PCONTEXT Context, IN PVOID Teb, IN PVOID KernelStack)
PKPRCB KiProcessorBlock[]
#define InitializeListHead(ListHead)
VOID KiSetProcessorType()
#define PRCB_BUILD_UNIPROCESSOR
union _FX_SAVE_AREA::@2358 U
#define KPCR_SET_MEMBER_COPY
PPC_QUAL void __writefsdword(const unsigned long Offset, const unsigned long Data)
KDESCRIPTOR KiIdtDescriptor
#define DBG_STATUS_CONTROL_C
__INTRIN_INLINE void __invlpg(void *Address)
INIT_FUNCTION VOID NTAPI KiI386PentiumLockErrataFixup(VOID)
VOID NTAPI Ki386EnableCurrentLargePage(IN ULONG_PTR StartAddress, IN ULONG Cr3)
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE
KSPIN_LOCK KiFreezeExecutionLock
KSPIN_LOCK Ki486CompatibilityLock
#define RtlZeroMemory(Destination, Length)
struct _ETHREAD * PETHREAD
__analysis_noreturn NTSYSAPI VOID NTAPI DbgBreakPointWithStatus(_In_ ULONG Status)
PVOID NTAPI MmCreateKernelStack(BOOLEAN GuiStack, UCHAR Node)
#define KeGetCurrentThread
INIT_FUNCTION VOID NTAPI KiRestoreFastSyscallReturnState(VOID)
#define ALIGN_DOWN_POINTER_BY(ptr, align)
INIT_FUNCTION BOOLEAN NTAPI KiIsNpxErrataPresent(VOID)
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE
VOID NTAPI KiInitializeKernel(IN PKPROCESS InitProcess, IN PKTHREAD InitThread, IN PVOID IdleStack, IN PKPRCB Prcb, IN CCHAR Number, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
#define PCR_MAJOR_VERSION
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
ULONG_PTR NTAPI KeIpiGenericCall(IN PKIPI_BROADCAST_WORKER Function, IN ULONG_PTR Argument)
LIST_ENTRY KiProcessListHead
#define PF_MMX_INSTRUCTIONS_AVAILABLE
VOID FASTCALL RtlPrefetchMemoryNonTemporal(IN PVOID Source, IN SIZE_T Length)