/* * PROJECT: ReactOS Kernel * LICENSE: MIT (https://spdx.org/licenses/MIT) * PURPOSE: Portable processor related routines * COPYRIGHT: Copyright 2025 Timo Kreuzer */ /* INCLUDES ******************************************************************/ #include #define NDEBUG #include /* GLOBALS *******************************************************************/ KAFFINITY KeActiveProcessors = 0; /* Number of processors */ CCHAR KeNumberProcessors = 0; #ifdef CONFIG_SMP /* Theoretical maximum number of processors that can be handled. * Set once at run-time. Returned by KeQueryMaximumProcessorCount(). */ ULONG KeMaximumProcessors = MAXIMUM_PROCESSORS; /* Maximum number of logical processors that can be started * (including dynamically) at run-time. If 0: do not perform checks. */ ULONG KeNumprocSpecified = 0; /* Maximum number of logical processors that can be started * at boot-time. If 0: do not perform checks. */ ULONG KeBootprocSpecified = 0; #endif // CONFIG_SMP /* FUNCTIONS *****************************************************************/ KAFFINITY NTAPI KeQueryActiveProcessors(VOID) { return KeActiveProcessors; } /** * Retrieves the number of the current processor. * * \param ProcessorNumber Pointer to a PROCESSOR_NUMBER structure that receives the processor number. * * \return NTSTATUS The status of the operation. */ NTSTATUS NTAPI NtGetCurrentProcessorNumberEx( _Out_ PPROCESSOR_NUMBER ProcessorNumber) { _SEH2_TRY { ProbeForWrite(ProcessorNumber, sizeof(PROCESSOR_NUMBER), __alignof(PROCESSOR_NUMBER)); ProcessorNumber->Group = 0; // TODO: Support processor groups ProcessorNumber->Number = (UCHAR)KeGetCurrentProcessorNumber(); ProcessorNumber->Reserved = 0; } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { return _SEH2_GetExceptionCode(); } _SEH2_END; return STATUS_SUCCESS; }