Refactor KE subsystem
This commit is contained in:
@@ -26,8 +26,9 @@ namespace KE
|
||||
STATIC XTAPI XTSTATUS GetKernelParameter(IN PCWSTR ParameterName,
|
||||
OUT PCWSTR *Parameter);
|
||||
STATIC XTAPI PLIST_ENTRY GetSystemResources(VOID);
|
||||
STATIC XTAPI VOID SetInitializationBlock(IN PKERNEL_INITIALIZATION_BLOCK Block);
|
||||
STATIC XTAPI VOID InitializeInitializationBlock(IN PKERNEL_INITIALIZATION_BLOCK Block);
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
STATIC XTAPI PKERNEL_INITIALIZATION_BLOCK GetInitializationBlock(VOID)
|
||||
{
|
||||
return InitializationBlock;
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Sets new interrupt handler for the existing IDT entry.
|
||||
*
|
||||
@@ -28,13 +24,13 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Irq::SetInterruptHandler(IN ULONG Vector,
|
||||
IN PVOID Handler)
|
||||
KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
||||
IN PVOID Handler)
|
||||
{
|
||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
||||
|
||||
/* Get current processor block */
|
||||
ProcessorBlock = KeGetCurrentProcessorBlock();
|
||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
||||
|
||||
/* Update interrupt handler */
|
||||
ProcessorBlock->IdtBase[(UCHAR) Vector].OffsetLow = ((ULONG_PTR)Handler & 0xFFFF);
|
||||
@@ -42,7 +38,6 @@ Irq::SetInterruptHandler(IN ULONG Vector,
|
||||
ProcessorBlock->IdtBase[(UCHAR) Vector].OffsetHigh = (ULONG_PTR)Handler >> 32;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* This routine initializes XT kernel.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::InitializeKernel(VOID)
|
||||
KE::KernelInit::InitializeKernel(VOID)
|
||||
{
|
||||
XTSTATUS Status;
|
||||
|
||||
@@ -45,7 +41,7 @@ KernelInit::InitializeKernel(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::InitializeMachine(VOID)
|
||||
KE::KernelInit::InitializeMachine(VOID)
|
||||
{
|
||||
/* Re-enable IDE interrupts */
|
||||
HlIoPortOutByte(0x376, 0);
|
||||
@@ -70,7 +66,7 @@ KernelInit::InitializeMachine(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::StartKernel(VOID)
|
||||
KE::KernelInit::StartKernel(VOID)
|
||||
{
|
||||
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||
ULONG_PTR PageDirectory[2];
|
||||
@@ -125,7 +121,7 @@ KernelInit::StartKernel(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::SwitchBootStack(VOID)
|
||||
KE::KernelInit::SwitchBootStack(VOID)
|
||||
{
|
||||
ULONG_PTR Stack;
|
||||
PVOID StartKernel;
|
||||
@@ -148,5 +144,3 @@ KernelInit::SwitchBootStack(VOID)
|
||||
"r" (StartKernel)
|
||||
: "rdx", "rbp", "rsp", "memory");
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes CPU architecture dependent context of a thread.
|
||||
*
|
||||
@@ -37,11 +33,11 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT ContextRecord)
|
||||
KE::KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT ContextRecord)
|
||||
{
|
||||
PKTHREAD_INIT_FRAME ThreadFrame;
|
||||
|
||||
@@ -49,7 +45,7 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
ThreadFrame = ((PKTHREAD_INIT_FRAME)Thread->InitialStack) - 1;
|
||||
|
||||
/* Fill floating point save area with zeroes */
|
||||
RtlZeroMemory(&ThreadFrame->NpxFrame, sizeof(FLOATING_SAVE_AREA));
|
||||
RTL::Memory::ZeroMemory(&ThreadFrame->NpxFrame, sizeof(FLOATING_SAVE_AREA));
|
||||
|
||||
/* Check if context provided for this thread */
|
||||
if(ContextRecord)
|
||||
@@ -58,8 +54,8 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
UNIMPLEMENTED;
|
||||
|
||||
/* Fill exception and trap frames with zeroes */
|
||||
RtlZeroMemory(&ThreadFrame->ExceptionFrame, sizeof(KEXCEPTION_FRAME));
|
||||
RtlZeroMemory(&ThreadFrame->TrapFrame, sizeof(KTRAP_FRAME));
|
||||
RTL::Memory::ZeroMemory(&ThreadFrame->ExceptionFrame, sizeof(KEXCEPTION_FRAME));
|
||||
RTL::Memory::ZeroMemory(&ThreadFrame->TrapFrame, sizeof(KTRAP_FRAME));
|
||||
|
||||
/* Disable debug registers and enable context registers */
|
||||
ContextRecord->ContextFlags &= ~CONTEXT_DEBUG_REGISTERS | CONTEXT_CONTROL;
|
||||
@@ -120,5 +116,3 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
/* Set thread stack */
|
||||
Thread->KernelStack = &ThreadFrame->SwitchFrame;
|
||||
}
|
||||
|
||||
} /* namespace */
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Gets the processor block for the currently executing processor.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
PKPROCESSOR_BLOCK
|
||||
Processor::GetCurrentProcessorBlock(VOID)
|
||||
KE::Processor::GetCurrentProcessorBlock(VOID)
|
||||
{
|
||||
/* Get processor block from GS register */
|
||||
return (PKPROCESSOR_BLOCK)AR::CpuFunc::ReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Self));
|
||||
@@ -37,7 +33,7 @@ Processor::GetCurrentProcessorBlock(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
PKPROCESSOR_CONTROL_BLOCK
|
||||
Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
KE::Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
{
|
||||
return (PKPROCESSOR_CONTROL_BLOCK)AR::CpuFunc::ReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CurrentPrcb));
|
||||
}
|
||||
@@ -51,7 +47,7 @@ Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
ULONG
|
||||
Processor::GetCurrentProcessorNumber(VOID)
|
||||
KE::Processor::GetCurrentProcessorNumber(VOID)
|
||||
{
|
||||
return (ULONG)AR::CpuFunc::ReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CpuNumber));
|
||||
}
|
||||
@@ -65,7 +61,7 @@ Processor::GetCurrentProcessorNumber(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
PKTHREAD
|
||||
Processor::GetCurrentThread(VOID)
|
||||
KE::Processor::GetCurrentThread(VOID)
|
||||
{
|
||||
return (PKTHREAD)AR::CpuFunc::ReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread));
|
||||
}
|
||||
@@ -82,7 +78,7 @@ Processor::GetCurrentThread(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
KE::Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
{
|
||||
/* Save CR registers */
|
||||
CpuState->SpecialRegisters.Cr0 = AR::CpuFunc::ReadControlRegister(0);
|
||||
@@ -117,7 +113,6 @@ Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
AR::CpuFunc::StoreTaskRegister(&CpuState->SpecialRegisters.Tr);
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes an APC object.
|
||||
*
|
||||
@@ -46,14 +42,14 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Apc::InitializeApc(IN PKAPC Apc,
|
||||
IN PKTHREAD Thread,
|
||||
IN KAPC_ENVIRONMENT Environment,
|
||||
IN PKKERNEL_ROUTINE KernelRoutine,
|
||||
IN PKRUNDOWN_ROUTINE RundownRoutine,
|
||||
IN PKNORMAL_ROUTINE NormalRoutine,
|
||||
IN KPROCESSOR_MODE ApcMode,
|
||||
IN PVOID Context)
|
||||
KE::Apc::InitializeApc(IN PKAPC Apc,
|
||||
IN PKTHREAD Thread,
|
||||
IN KAPC_ENVIRONMENT Environment,
|
||||
IN PKKERNEL_ROUTINE KernelRoutine,
|
||||
IN PKRUNDOWN_ROUTINE RundownRoutine,
|
||||
IN PKNORMAL_ROUTINE NormalRoutine,
|
||||
IN KPROCESSOR_MODE ApcMode,
|
||||
IN PVOID Context)
|
||||
{
|
||||
/* Set APC type and thread */
|
||||
Apc->Type = ApcObject;
|
||||
@@ -93,5 +89,3 @@ Apc::InitializeApc(IN PKAPC Apc,
|
||||
/* Mark APC as not inserted yet */
|
||||
Apc->Inserted = FALSE;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,13 +9,9 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
XTAPI
|
||||
PVOID
|
||||
BootInformation::GetDebugPrint(VOID)
|
||||
KE::BootInformation::GetDebugPrint(VOID)
|
||||
{
|
||||
return InitializationBlock->LoaderInformation.DbgPrint;
|
||||
}
|
||||
@@ -29,7 +25,7 @@ BootInformation::GetDebugPrint(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
SYSTEM_FIRMWARE_TYPE
|
||||
BootInformation::GetFirmwareType(VOID)
|
||||
KE::BootInformation::GetFirmwareType(VOID)
|
||||
{
|
||||
return InitializationBlock->FirmwareInformation.FirmwareType;
|
||||
}
|
||||
@@ -49,8 +45,8 @@ BootInformation::GetFirmwareType(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
BootInformation::GetKernelParameter(IN PCWSTR ParameterName,
|
||||
OUT PCWSTR *Parameter)
|
||||
KE::BootInformation::GetKernelParameter(IN PCWSTR ParameterName,
|
||||
OUT PCWSTR *Parameter)
|
||||
{
|
||||
PCWSTR Match, SearchStart;
|
||||
SIZE_T ParameterNameLength;
|
||||
@@ -63,7 +59,7 @@ BootInformation::GetKernelParameter(IN PCWSTR ParameterName,
|
||||
}
|
||||
|
||||
/* Get the length of the parameter name we are looking for */
|
||||
ParameterNameLength = RtlWideStringLength(ParameterName, 0);
|
||||
ParameterNameLength = RTL::WideString::WideStringLength(ParameterName, 0);
|
||||
if(ParameterNameLength == 0)
|
||||
{
|
||||
/* Do not allow empty parameter names */
|
||||
@@ -77,7 +73,7 @@ BootInformation::GetKernelParameter(IN PCWSTR ParameterName,
|
||||
SearchStart = InitializationBlock->KernelParameters;
|
||||
|
||||
/* Search for the parameter name */
|
||||
while((Match = RtlFindWideStringInsensitive(SearchStart, ParameterName)))
|
||||
while((Match = RTL::WideString::FindWideStringInsensitive(SearchStart, ParameterName)))
|
||||
{
|
||||
/* Check if the match is at the start of the string or preceded by a space */
|
||||
if(Match == InitializationBlock->KernelParameters || *(Match - 1) == L' ')
|
||||
@@ -102,32 +98,37 @@ BootInformation::GetKernelParameter(IN PCWSTR ParameterName,
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves a pointer to the list of system resources.
|
||||
*
|
||||
* @return This routine returns a pointer to the list of system resources.
|
||||
*
|
||||
*
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
PLIST_ENTRY
|
||||
BootInformation::GetSystemResources(VOID)
|
||||
KE::BootInformation::GetSystemResources(VOID)
|
||||
{
|
||||
return &InitializationBlock->SystemResourcesListHead;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the bootloader-provided system information.
|
||||
*
|
||||
* @param Block
|
||||
* Supplies a pointer to the kernel initialization block.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
BootInformation::SetInitializationBlock(IN PKERNEL_INITIALIZATION_BLOCK Block)
|
||||
KE::BootInformation::InitializeInitializationBlock(IN PKERNEL_INITIALIZATION_BLOCK Block)
|
||||
{
|
||||
InitializationBlock = Block;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
@@ -140,6 +141,7 @@ KeGetKernelParameter(IN PCWSTR ParameterName,
|
||||
return KE::BootInformation::GetKernelParameter(ParameterName, Parameter);
|
||||
}
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
XTCLINK
|
||||
XTAPI
|
||||
PKERNEL_INITIALIZATION_BLOCK
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Halts the system.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Crash::HaltSystem(VOID)
|
||||
KE::Crash::HaltSystem(VOID)
|
||||
{
|
||||
/* Enter infinite loop */
|
||||
for(;;)
|
||||
@@ -45,7 +41,7 @@ Crash::HaltSystem(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Crash::Panic(IN ULONG Code)
|
||||
KE::Crash::Panic(IN ULONG Code)
|
||||
{
|
||||
PanicEx(Code, 0, 0, 0, 0);
|
||||
}
|
||||
@@ -74,7 +70,7 @@ Crash::Panic(IN ULONG Code)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Crash::PanicEx(IN ULONG Code,
|
||||
KE::Crash::PanicEx(IN ULONG Code,
|
||||
IN ULONG_PTR Parameter1,
|
||||
IN ULONG_PTR Parameter2,
|
||||
IN ULONG_PTR Parameter3,
|
||||
@@ -84,7 +80,6 @@ Crash::PanicEx(IN ULONG Code,
|
||||
HaltSystem();
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
|
@@ -9,26 +9,20 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/* Kernel initialization block passed by boot loader */
|
||||
PKERNEL_INITIALIZATION_BLOCK BootInformation::InitializationBlock = {};
|
||||
PKERNEL_INITIALIZATION_BLOCK KE::BootInformation::InitializationBlock = {};
|
||||
|
||||
/* Kernel boot resources list */
|
||||
LIST_ENTRY SystemResources::ResourcesListHead;
|
||||
LIST_ENTRY KE::SystemResources::ResourcesListHead;
|
||||
|
||||
/* Kernel boot resources lock */
|
||||
KSPIN_LOCK SystemResources::ResourcesLock;
|
||||
KSPIN_LOCK KE::SystemResources::ResourcesLock;
|
||||
|
||||
/* Kernel initial process */
|
||||
EPROCESS KProcess::InitialProcess;
|
||||
EPROCESS KE::KProcess::InitialProcess;
|
||||
|
||||
/* Kernel initial thread */
|
||||
ETHREAD KThread::InitialThread = {};
|
||||
ETHREAD KE::KThread::InitialThread = {};
|
||||
|
||||
/* Kernel UBSAN active frame flag */
|
||||
BOOLEAN KUbsan::ActiveFrame = FALSE;
|
||||
|
||||
} /* namespace */
|
||||
BOOLEAN KE::KUbsan::ActiveFrame = FALSE;
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes Deferred Procedure Call (DPC) object.
|
||||
*
|
||||
@@ -31,9 +27,9 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Dpc::InitializeDpc(IN PKDPC Dpc,
|
||||
IN PKDEFERRED_ROUTINE DpcRoutine,
|
||||
IN PVOID DpcContext)
|
||||
KE::Dpc::InitializeDpc(IN PKDPC Dpc,
|
||||
IN PKDEFERRED_ROUTINE DpcRoutine,
|
||||
IN PVOID DpcContext)
|
||||
{
|
||||
/* Initialize DPC */
|
||||
Dpc->Type = DpcObject;
|
||||
@@ -64,9 +60,9 @@ Dpc::InitializeDpc(IN PKDPC Dpc,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Dpc::InitializeThreadedDpc(IN PKDPC Dpc,
|
||||
IN PKDEFERRED_ROUTINE DpcRoutine,
|
||||
IN PVOID DpcContext)
|
||||
KE::Dpc::InitializeThreadedDpc(IN PKDPC Dpc,
|
||||
IN PKDEFERRED_ROUTINE DpcRoutine,
|
||||
IN PVOID DpcContext)
|
||||
{
|
||||
/* Initialize threaded DPC */
|
||||
Dpc->Type = ThreadedDpcObject;
|
||||
@@ -94,8 +90,8 @@ Dpc::InitializeThreadedDpc(IN PKDPC Dpc,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Dpc::SetTargetProcessor(IN PKDPC Dpc,
|
||||
IN CCHAR Number)
|
||||
KE::Dpc::SetTargetProcessor(IN PKDPC Dpc,
|
||||
IN CCHAR Number)
|
||||
{
|
||||
Dpc->Number = MAXIMUM_PROCESSORS + Number;
|
||||
}
|
||||
@@ -112,7 +108,7 @@ Dpc::SetTargetProcessor(IN PKDPC Dpc,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Dpc::SignalCallDone(IN PVOID SystemArgument)
|
||||
KE::Dpc::SignalCallDone(IN PVOID SystemArgument)
|
||||
{
|
||||
RTL::Atomic::Decrement32((PLONG)SystemArgument);
|
||||
}
|
||||
@@ -129,7 +125,7 @@ Dpc::SignalCallDone(IN PVOID SystemArgument)
|
||||
*/
|
||||
XTAPI
|
||||
BOOLEAN
|
||||
Dpc::SignalCallSynchronize(IN PVOID SystemArgument)
|
||||
KE::Dpc::SignalCallSynchronize(IN PVOID SystemArgument)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
|
||||
@@ -149,9 +145,7 @@ Dpc::SignalCallSynchronize(IN PVOID SystemArgument)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
Dpc::RetireList(IN PKPROCESSOR_CONTROL_BLOCK Prcb)
|
||||
KE::Dpc::RetireList(IN PKPROCESSOR_CONTROL_BLOCK Prcb)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Clears the signal state of the event.
|
||||
*
|
||||
@@ -25,7 +21,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Event::ClearEvent(IN PKEVENT Event)
|
||||
KE::Event::ClearEvent(IN PKEVENT Event)
|
||||
{
|
||||
/* Clear event's signal state */
|
||||
Event->Header.SignalState = FALSE;
|
||||
@@ -49,9 +45,9 @@ Event::ClearEvent(IN PKEVENT Event)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Event::InitializeEvent(OUT PKEVENT Event,
|
||||
IN KEVENT_TYPE EventType,
|
||||
IN BOOLEAN InitialState)
|
||||
KE::Event::InitializeEvent(OUT PKEVENT Event,
|
||||
IN KEVENT_TYPE EventType,
|
||||
IN BOOLEAN InitialState)
|
||||
{
|
||||
/* Initialize event dispatcher header */
|
||||
Event->Header.Type = EventType;
|
||||
@@ -79,13 +75,11 @@ Event::InitializeEvent(OUT PKEVENT Event,
|
||||
*/
|
||||
XTAPI
|
||||
LONG
|
||||
Event::SetEvent(IN PKEVENT Event,
|
||||
IN KPRIORITY Increment,
|
||||
IN BOOLEAN Wait)
|
||||
KE::Event::SetEvent(IN PKEVENT Event,
|
||||
IN KPRIORITY Increment,
|
||||
IN BOOLEAN Wait)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Sets new interrupt handler for the existing IDT entry.
|
||||
*
|
||||
@@ -28,20 +24,19 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Irq::SetInterruptHandler(IN ULONG Vector,
|
||||
IN PVOID Handler)
|
||||
KE::Irq::SetInterruptHandler(IN ULONG Vector,
|
||||
IN PVOID Handler)
|
||||
{
|
||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
||||
|
||||
/* Get current processor block */
|
||||
ProcessorBlock = KeGetCurrentProcessorBlock();
|
||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
||||
|
||||
/* Update interrupt handler */
|
||||
ProcessorBlock->IdtBase[(UCHAR) Vector].Offset = (USHORT)((ULONG)Handler & 0xFFFF);
|
||||
ProcessorBlock->IdtBase[(UCHAR) Vector].ExtendedOffset = (USHORT)((ULONG)Handler >> 16);
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* This routine initializes XT kernel.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::InitializeKernel(VOID)
|
||||
KE::KernelInit::InitializeKernel(VOID)
|
||||
{
|
||||
XTSTATUS Status;
|
||||
|
||||
@@ -45,7 +41,7 @@ KernelInit::InitializeKernel(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::InitializeMachine(VOID)
|
||||
KE::KernelInit::InitializeMachine(VOID)
|
||||
{
|
||||
/* Re-enable IDE interrupts */
|
||||
HlIoPortOutByte(0x376, 0);
|
||||
@@ -70,7 +66,7 @@ KernelInit::InitializeMachine(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::StartKernel(VOID)
|
||||
KE::KernelInit::StartKernel(VOID)
|
||||
{
|
||||
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||
ULONG_PTR PageDirectory[2];
|
||||
@@ -125,7 +121,7 @@ KernelInit::StartKernel(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KernelInit::SwitchBootStack(VOID)
|
||||
KE::KernelInit::SwitchBootStack(VOID)
|
||||
{
|
||||
ULONG_PTR Stack;
|
||||
PVOID StartKernel;
|
||||
@@ -150,5 +146,3 @@ KernelInit::SwitchBootStack(VOID)
|
||||
"r" (StartKernel)
|
||||
: "edx", "ebp", "esp", "memory");
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes CPU architecture dependent context of a thread.
|
||||
*
|
||||
@@ -37,11 +33,11 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT ContextRecord)
|
||||
KE::KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT ContextRecord)
|
||||
{
|
||||
PKTHREAD_INIT_FRAME ThreadFrame;
|
||||
PFX_SAVE_FORMAT FxSaveFormat;
|
||||
@@ -50,7 +46,7 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
ThreadFrame = (PKTHREAD_INIT_FRAME)((ULONG_PTR)Thread->InitialStack - sizeof(KTHREAD_INIT_FRAME));
|
||||
|
||||
/* Fill floating point save area with zeroes */
|
||||
RtlZeroMemory(&ThreadFrame->NpxFrame, sizeof(FX_SAVE_AREA));
|
||||
RTL::Memory::ZeroMemory(&ThreadFrame->NpxFrame, sizeof(FX_SAVE_AREA));
|
||||
|
||||
/* Check if context provided for this thread */
|
||||
if(ContextRecord)
|
||||
@@ -59,7 +55,7 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
UNIMPLEMENTED;
|
||||
|
||||
/* Fill trap frame with zeroes */
|
||||
RtlZeroMemory(&ThreadFrame->TrapFrame, sizeof(KTRAP_FRAME));
|
||||
RTL::Memory::ZeroMemory(&ThreadFrame->TrapFrame, sizeof(KTRAP_FRAME));
|
||||
|
||||
/* Disable debug registers and enable context registers */
|
||||
ContextRecord->ContextFlags &= ~CONTEXT_DEBUG_REGISTERS | CONTEXT_CONTROL;
|
||||
@@ -118,5 +114,3 @@ KThread::InitializeThreadContext(IN PKTHREAD Thread,
|
||||
/* Set thread stack */
|
||||
Thread->KernelStack = &ThreadFrame->SwitchFrame;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Gets the processor block for the currently executing processor.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
PKPROCESSOR_BLOCK
|
||||
Processor::GetCurrentProcessorBlock(VOID)
|
||||
KE::Processor::GetCurrentProcessorBlock(VOID)
|
||||
{
|
||||
/* Get processor block from FS register */
|
||||
return (PKPROCESSOR_BLOCK)AR::CpuFunc::ReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Self));
|
||||
@@ -37,7 +33,7 @@ Processor::GetCurrentProcessorBlock(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
PKPROCESSOR_CONTROL_BLOCK
|
||||
Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
KE::Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
{
|
||||
return (PKPROCESSOR_CONTROL_BLOCK)AR::CpuFunc::ReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CurrentPrcb));
|
||||
}
|
||||
@@ -51,7 +47,7 @@ Processor::GetCurrentProcessorControlBlock(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
ULONG
|
||||
Processor::GetCurrentProcessorNumber(VOID)
|
||||
KE::Processor::GetCurrentProcessorNumber(VOID)
|
||||
{
|
||||
return (ULONG)AR::CpuFunc::ReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CpuNumber));
|
||||
}
|
||||
@@ -65,7 +61,7 @@ Processor::GetCurrentProcessorNumber(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
PKTHREAD
|
||||
Processor::GetCurrentThread(VOID)
|
||||
KE::Processor::GetCurrentThread(VOID)
|
||||
{
|
||||
return (PKTHREAD)AR::CpuFunc::ReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread));
|
||||
}
|
||||
@@ -82,7 +78,7 @@ Processor::GetCurrentThread(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
KE::Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
{
|
||||
/* Save CR registers */
|
||||
CpuState->SpecialRegisters.Cr0 = AR::CpuFunc::ReadControlRegister(0);
|
||||
@@ -105,7 +101,6 @@ Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState)
|
||||
AR::CpuFunc::StoreTaskRegister(&CpuState->SpecialRegisters.Tr);
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
@@ -9,13 +9,9 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
XTAPI
|
||||
PEPROCESS
|
||||
KProcess::GetInitialProcess(VOID)
|
||||
KE::KProcess::GetInitialProcess(VOID)
|
||||
{
|
||||
return &InitialProcess;
|
||||
}
|
||||
@@ -44,7 +40,7 @@ KProcess::GetInitialProcess(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
||||
KE::KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
||||
IN KPRIORITY Priority,
|
||||
IN KAFFINITY Affinity,
|
||||
IN PULONG_PTR DirectoryTable,
|
||||
@@ -79,7 +75,6 @@ KProcess::InitializeProcess(IN OUT PKPROCESS Process,
|
||||
Process->State = ProcessInMemory;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
@@ -36,7 +36,7 @@ KeStartXtSystem(IN PKERNEL_INITIALIZATION_BLOCK Parameters)
|
||||
}
|
||||
|
||||
/* Save the kernel initialization block */
|
||||
BootInformation::SetInitializationBlock(Parameters);
|
||||
BootInformation::InitializeInitializationBlock(Parameters);
|
||||
|
||||
/* Check if debugging enabled and if boot loader provided routine for debug printing */
|
||||
if(DEBUG && BootInformation::GetDebugPrint())
|
||||
|
@@ -9,13 +9,9 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
XTAPI
|
||||
PETHREAD
|
||||
KThread::GetInitialThread(VOID)
|
||||
KE::KThread::GetInitialThread(VOID)
|
||||
{
|
||||
return &InitialThread;
|
||||
}
|
||||
@@ -32,7 +28,7 @@ KThread::GetInitialThread(VOID)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
KThread::ExitDispatcher(IN KRUNLEVEL OldRunLevel)
|
||||
KE::KThread::ExitDispatcher(IN KRUNLEVEL OldRunLevel)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
|
||||
@@ -73,15 +69,15 @@ KThread::ExitDispatcher(IN KRUNLEVEL OldRunLevel)
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
KThread::InitializeThread(IN PKPROCESS Process,
|
||||
IN OUT PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT Context,
|
||||
IN PVOID EnvironmentBlock,
|
||||
IN PVOID Stack,
|
||||
IN BOOLEAN RunThread)
|
||||
KE::KThread::InitializeThread(IN PKPROCESS Process,
|
||||
IN OUT PKTHREAD Thread,
|
||||
IN PKSYSTEM_ROUTINE SystemRoutine,
|
||||
IN PKSTART_ROUTINE StartRoutine,
|
||||
IN PVOID StartContext,
|
||||
IN PCONTEXT Context,
|
||||
IN PVOID EnvironmentBlock,
|
||||
IN PVOID Stack,
|
||||
IN BOOLEAN RunThread)
|
||||
{
|
||||
PKWAIT_BLOCK TimerWaitBlock;
|
||||
BOOLEAN Allocation;
|
||||
@@ -217,7 +213,7 @@ KThread::InitializeThread(IN PKPROCESS Process,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::StartThread(IN PKTHREAD Thread)
|
||||
KE::KThread::StartThread(IN PKTHREAD Thread)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
@@ -246,11 +242,11 @@ KThread::StartThread(IN PKTHREAD Thread)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::SuspendNop(IN PKAPC Apc,
|
||||
IN OUT PKNORMAL_ROUTINE *NormalRoutine,
|
||||
IN OUT PVOID *NormalContext,
|
||||
IN OUT PVOID *SystemArgument1,
|
||||
IN OUT PVOID *SystemArgument2)
|
||||
KE::KThread::SuspendNop(IN PKAPC Apc,
|
||||
IN OUT PKNORMAL_ROUTINE *NormalRoutine,
|
||||
IN OUT PVOID *NormalContext,
|
||||
IN OUT PVOID *SystemArgument1,
|
||||
IN OUT PVOID *SystemArgument2)
|
||||
{
|
||||
/* No action here */
|
||||
}
|
||||
@@ -267,7 +263,7 @@ KThread::SuspendNop(IN PKAPC Apc,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::SuspendRundown(IN PKAPC Apc)
|
||||
KE::KThread::SuspendRundown(IN PKAPC Apc)
|
||||
{
|
||||
/* No action here */
|
||||
}
|
||||
@@ -290,14 +286,14 @@ KThread::SuspendRundown(IN PKAPC Apc)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
KThread::SuspendThread(IN PVOID NormalContext,
|
||||
IN PVOID SystemArgument1,
|
||||
IN PVOID SystemArgument2)
|
||||
KE::KThread::SuspendThread(IN PVOID NormalContext,
|
||||
IN PVOID SystemArgument1,
|
||||
IN PVOID SystemArgument2)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Checks whether handled UBSAN error should be reported.
|
||||
*
|
||||
@@ -25,7 +21,7 @@ namespace KE
|
||||
*/
|
||||
XTCDECL
|
||||
BOOLEAN
|
||||
KUbsan::CheckReport(PKUBSAN_SOURCE_LOCATION Location)
|
||||
KE::KUbsan::CheckReport(PKUBSAN_SOURCE_LOCATION Location)
|
||||
{
|
||||
/* Make sure, this error should be reported */
|
||||
return (BOOLEAN)!ActiveFrame;
|
||||
@@ -46,8 +42,8 @@ KUbsan::CheckReport(PKUBSAN_SOURCE_LOCATION Location)
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::EnterFrame(PKUBSAN_SOURCE_LOCATION Location,
|
||||
PCCHAR Reason)
|
||||
KE::KUbsan::EnterFrame(PKUBSAN_SOURCE_LOCATION Location,
|
||||
PCCHAR Reason)
|
||||
{
|
||||
/* Enter UBSAN frame */
|
||||
ActiveFrame = TRUE;
|
||||
@@ -72,8 +68,8 @@ KUbsan::EnterFrame(PKUBSAN_SOURCE_LOCATION Location,
|
||||
*/
|
||||
XTCDECL
|
||||
LONGLONG
|
||||
KUbsan::GetSignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
PVOID Value)
|
||||
KE::KUbsan::GetSignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
PVOID Value)
|
||||
{
|
||||
ULONG BitWidth, ExtraBits;
|
||||
ULONG_PTR LongValue;
|
||||
@@ -106,7 +102,7 @@ KUbsan::GetSignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
*/
|
||||
XTCDECL
|
||||
PCCHAR
|
||||
KUbsan::GetTypeKind(UCHAR TypeCheckKind)
|
||||
KE::KUbsan::GetTypeKind(UCHAR TypeCheckKind)
|
||||
{
|
||||
/* Get type kind name */
|
||||
switch(TypeCheckKind)
|
||||
@@ -151,8 +147,8 @@ KUbsan::GetTypeKind(UCHAR TypeCheckKind)
|
||||
*/
|
||||
XTCDECL
|
||||
ULONGLONG
|
||||
KUbsan::GetUnsignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
PVOID Value)
|
||||
KE::KUbsan::GetUnsignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
PVOID Value)
|
||||
{
|
||||
ULONG BitWidth;
|
||||
|
||||
@@ -188,9 +184,9 @@ KUbsan::GetUnsignedValue(PKUBSAN_TYPE_DESCRIPTOR Type,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleDivisionOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
PVOID Lhs,
|
||||
PVOID Rhs)
|
||||
KE::KUbsan::HandleDivisionOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
PVOID Lhs,
|
||||
PVOID Rhs)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -236,9 +232,9 @@ KUbsan::HandleDivisionOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleFloatCastOverflow(PKUBSAN_FLOAT_CAST_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
KE::KUbsan::HandleFloatCastOverflow(PKUBSAN_FLOAT_CAST_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -272,8 +268,8 @@ KUbsan::HandleFloatCastOverflow(PKUBSAN_FLOAT_CAST_OVERFLOW_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleFunctionTypeMismatch(PKUBSAN_FUNCTION_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
KE::KUbsan::HandleFunctionTypeMismatch(PKUBSAN_FUNCTION_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -311,9 +307,9 @@ KUbsan::HandleFunctionTypeMismatch(PKUBSAN_FUNCTION_TYPE_MISMATCH_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleIntegerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
KE::KUbsan::HandleIntegerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -344,7 +340,7 @@ KUbsan::HandleIntegerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleInvalidBuiltin(PKUBSAN_INVALID_BUILTIN_DATA Data)
|
||||
KE::KUbsan::HandleInvalidBuiltin(PKUBSAN_INVALID_BUILTIN_DATA Data)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -387,8 +383,8 @@ KUbsan::HandleInvalidBuiltin(PKUBSAN_INVALID_BUILTIN_DATA Data)
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleMisalignedAccess(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
KE::KUbsan::HandleMisalignedAccess(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -423,8 +419,8 @@ KUbsan::HandleMisalignedAccess(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleNegateOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR OldValue)
|
||||
KE::KUbsan::HandleNegateOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR OldValue)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -459,7 +455,7 @@ KUbsan::HandleNegateOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleNullPointerDereference(PKUBSAN_TYPE_MISMATCH_DATA Data)
|
||||
KE::KUbsan::HandleNullPointerDereference(PKUBSAN_TYPE_MISMATCH_DATA Data)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -493,8 +489,8 @@ KUbsan::HandleNullPointerDereference(PKUBSAN_TYPE_MISMATCH_DATA Data)
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleObjectSizeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
KE::KUbsan::HandleObjectSizeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -529,8 +525,8 @@ KUbsan::HandleObjectSizeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleOutOfBounds(PKUBSAN_OUT_OF_BOUNDS_DATA Data,
|
||||
ULONG_PTR Index)
|
||||
KE::KUbsan::HandleOutOfBounds(PKUBSAN_OUT_OF_BOUNDS_DATA Data,
|
||||
ULONG_PTR Index)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -567,9 +563,9 @@ KUbsan::HandleOutOfBounds(PKUBSAN_OUT_OF_BOUNDS_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandlePointerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
KE::KUbsan::HandlePointerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
{
|
||||
/* Check if this error was already reported */
|
||||
if(!CheckReport(&Data->Location))
|
||||
@@ -608,9 +604,9 @@ KUbsan::HandlePointerOverflow(PKUBSAN_OVERFLOW_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleShiftOutOfBounds(PKUBSAN_SHIFT_OUT_OF_BOUNDS_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
KE::KUbsan::HandleShiftOutOfBounds(PKUBSAN_SHIFT_OUT_OF_BOUNDS_DATA Data,
|
||||
ULONG_PTR Lhs,
|
||||
ULONG_PTR Rhs)
|
||||
{
|
||||
ULONG LhsBitWidth;
|
||||
|
||||
@@ -671,8 +667,8 @@ KUbsan::HandleShiftOutOfBounds(PKUBSAN_SHIFT_OUT_OF_BOUNDS_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::HandleTypeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
KE::KUbsan::HandleTypeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
ULONG_PTR Pointer)
|
||||
{
|
||||
/* Check the type of mismatch */
|
||||
if(!Pointer)
|
||||
@@ -701,13 +697,12 @@ KUbsan::HandleTypeMismatch(PKUBSAN_TYPE_MISMATCH_DATA Data,
|
||||
*/
|
||||
XTCDECL
|
||||
VOID
|
||||
KUbsan::LeaveFrame()
|
||||
KE::KUbsan::LeaveFrame()
|
||||
{
|
||||
/* Leave UBSAN frame */
|
||||
ActiveFrame = FALSE;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Gets the current running level of the current processor.
|
||||
*
|
||||
@@ -22,7 +18,7 @@ namespace KE
|
||||
*/
|
||||
XTFASTCALL
|
||||
KRUNLEVEL
|
||||
RunLevel::GetCurrentRunLevel(VOID)
|
||||
KE::RunLevel::GetCurrentRunLevel(VOID)
|
||||
{
|
||||
return HlGetRunLevel();
|
||||
}
|
||||
@@ -39,7 +35,7 @@ RunLevel::GetCurrentRunLevel(VOID)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
RunLevel::LowerRunLevel(IN KRUNLEVEL RunLevel)
|
||||
KE::RunLevel::LowerRunLevel(IN KRUNLEVEL RunLevel)
|
||||
{
|
||||
KRUNLEVEL OldRunLevel;
|
||||
|
||||
@@ -66,7 +62,7 @@ RunLevel::LowerRunLevel(IN KRUNLEVEL RunLevel)
|
||||
*/
|
||||
XTFASTCALL
|
||||
KRUNLEVEL
|
||||
RunLevel::RaiseRunLevel(IN KRUNLEVEL RunLevel)
|
||||
KE::RunLevel::RaiseRunLevel(IN KRUNLEVEL RunLevel)
|
||||
{
|
||||
KRUNLEVEL OldRunLevel;
|
||||
|
||||
@@ -84,7 +80,6 @@ RunLevel::RaiseRunLevel(IN KRUNLEVEL RunLevel)
|
||||
return OldRunLevel;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
||||
|
||||
/* TEMPORARY FOR COMPATIBILITY WITH C CODE */
|
||||
|
@@ -9,9 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes a kernel semaphore object.
|
||||
*
|
||||
@@ -30,9 +27,9 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Semaphore::InitializeSemaphore(IN PKSEMAPHORE Semaphore,
|
||||
IN LONG Count,
|
||||
IN LONG Limit)
|
||||
KE::Semaphore::InitializeSemaphore(IN PKSEMAPHORE Semaphore,
|
||||
IN LONG Count,
|
||||
IN LONG Limit)
|
||||
{
|
||||
/* Initialize semaphore header and limit */
|
||||
Semaphore->Header.Type = SemaphoreObject;
|
||||
@@ -55,7 +52,7 @@ Semaphore::InitializeSemaphore(IN PKSEMAPHORE Semaphore,
|
||||
*/
|
||||
XTAPI
|
||||
LONG
|
||||
Semaphore::ReadState(IN PKSEMAPHORE Semaphore)
|
||||
KE::Semaphore::ReadState(IN PKSEMAPHORE Semaphore)
|
||||
{
|
||||
/* Return semaphore's signal state */
|
||||
return Semaphore->Header.SignalState;
|
||||
@@ -82,13 +79,11 @@ Semaphore::ReadState(IN PKSEMAPHORE Semaphore)
|
||||
*/
|
||||
XTAPI
|
||||
LONG
|
||||
Semaphore::ReleaseSemaphore(IN PKSEMAPHORE Semaphore,
|
||||
IN KPRIORITY Increment,
|
||||
IN LONG Adjustment,
|
||||
IN BOOLEAN Wait)
|
||||
KE::Semaphore::ReleaseSemaphore(IN PKSEMAPHORE Semaphore,
|
||||
IN KPRIORITY Increment,
|
||||
IN LONG Adjustment,
|
||||
IN BOOLEAN Wait)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Acquires a specified queued spinlock.
|
||||
*
|
||||
@@ -25,7 +21,7 @@ namespace KE
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
SpinLock::AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
KE::SpinLock::AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
{
|
||||
/* Acquire the queued spinlock */
|
||||
AcquireSpinLock(KE::Processor::GetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
||||
@@ -43,7 +39,7 @@ SpinLock::AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
SpinLock::AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
KE::SpinLock::AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
{
|
||||
/* Try to acquire the lock */
|
||||
while(RTL::Atomic::BitTestAndSet((PLONG)SpinLock, 0))
|
||||
@@ -72,7 +68,7 @@ SpinLock::AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
SpinLock::InitializeSpinLock(IN PKSPIN_LOCK SpinLock)
|
||||
KE::SpinLock::InitializeSpinLock(IN PKSPIN_LOCK SpinLock)
|
||||
{
|
||||
/* Zero initialize spinlock */
|
||||
*SpinLock = 0;
|
||||
@@ -90,7 +86,7 @@ SpinLock::InitializeSpinLock(IN PKSPIN_LOCK SpinLock)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
SpinLock::ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
KE::SpinLock::ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
{
|
||||
/* Clear the lock */
|
||||
ReleaseSpinLock(KE::Processor::GetCurrentProcessorControlBlock()->LockQueue[LockLevel].Lock);
|
||||
@@ -108,7 +104,7 @@ SpinLock::ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel)
|
||||
*/
|
||||
XTFASTCALL
|
||||
VOID
|
||||
SpinLock::ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
KE::SpinLock::ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
{
|
||||
/* Clear the lock */
|
||||
RTL::Atomic::And32((PLONG)SpinLock, 0);
|
||||
@@ -116,5 +112,3 @@ SpinLock::ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock)
|
||||
/* Add an explicit memory barrier */
|
||||
AR::CpuFunc::ReadWriteBarrier();
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,10 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
/* Kernel Library */
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Looks for an unacquired system resource of the specified type and acquires it.
|
||||
*
|
||||
@@ -28,8 +24,8 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
SystemResources::AcquireResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
KE::SystemResources::AcquireResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
{
|
||||
/* Get system resource and acquire an ownership */
|
||||
return GetSystemResource(ResourceType, TRUE, ResourceHeader);
|
||||
@@ -53,9 +49,9 @@ SystemResources::AcquireResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
SystemResources::GetSystemResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
IN BOOLEAN ResourceLock,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
KE::SystemResources::GetSystemResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
IN BOOLEAN ResourceLock,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
{
|
||||
PSYSTEM_RESOURCE_HEADER Resource;
|
||||
PLIST_ENTRY ListEntry;
|
||||
@@ -141,8 +137,8 @@ SystemResources::GetSystemResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
*/
|
||||
XTAPI
|
||||
XTSTATUS
|
||||
SystemResources::GetResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
KE::SystemResources::GetResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
OUT PSYSTEM_RESOURCE_HEADER *ResourceHeader)
|
||||
{
|
||||
/* Get system resource without acquiring an ownership */
|
||||
return GetSystemResource(ResourceType, FALSE, ResourceHeader);
|
||||
@@ -157,7 +153,7 @@ SystemResources::GetResource(IN SYSTEM_RESOURCE_TYPE ResourceType,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
SystemResources::InitializeResources(VOID)
|
||||
KE::SystemResources::InitializeResources(VOID)
|
||||
{
|
||||
PSYSTEM_RESOURCE_HEADER ResourceHeader;
|
||||
PLIST_ENTRY ListEntry, NextListEntry;
|
||||
@@ -221,7 +217,7 @@ SystemResources::InitializeResources(VOID)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
SystemResources::ReleaseResource(IN PSYSTEM_RESOURCE_HEADER ResourceHeader)
|
||||
KE::SystemResources::ReleaseResource(IN PSYSTEM_RESOURCE_HEADER ResourceHeader)
|
||||
{
|
||||
/* Disable interrupts and acquire a spinlock */
|
||||
AR::CpuFunc::ClearInterruptFlag();
|
||||
@@ -234,5 +230,3 @@ SystemResources::ReleaseResource(IN PSYSTEM_RESOURCE_HEADER ResourceHeader)
|
||||
SpinLock::ReleaseSpinLock(&ResourcesLock);
|
||||
AR::CpuFunc::SetInterruptFlag();
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
@@ -9,9 +9,6 @@
|
||||
#include <xtos.hh>
|
||||
|
||||
|
||||
namespace KE
|
||||
{
|
||||
|
||||
/**
|
||||
* Cancels the timer.
|
||||
*
|
||||
@@ -24,7 +21,7 @@ namespace KE
|
||||
*/
|
||||
XTAPI
|
||||
BOOLEAN
|
||||
Timer::CancelTimer(IN PKTIMER Timer)
|
||||
KE::Timer::CancelTimer(IN PKTIMER Timer)
|
||||
{
|
||||
BOOLEAN Result;
|
||||
KRUNLEVEL RunLevel;
|
||||
@@ -64,7 +61,7 @@ Timer::CancelTimer(IN PKTIMER Timer)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Timer::ClearTimer(IN PKTIMER Timer)
|
||||
KE::Timer::ClearTimer(IN PKTIMER Timer)
|
||||
{
|
||||
/* Clear signal state */
|
||||
Timer->Header.SignalState = 0;
|
||||
@@ -82,7 +79,7 @@ Timer::ClearTimer(IN PKTIMER Timer)
|
||||
*/
|
||||
XTAPI
|
||||
BOOLEAN
|
||||
Timer::GetState(IN PKTIMER Timer)
|
||||
KE::Timer::GetState(IN PKTIMER Timer)
|
||||
{
|
||||
/* Return timer state */
|
||||
return (BOOLEAN)Timer->Header.SignalState;
|
||||
@@ -103,8 +100,8 @@ Timer::GetState(IN PKTIMER Timer)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Timer::InitializeTimer(OUT PKTIMER Timer,
|
||||
IN KTIMER_TYPE Type)
|
||||
KE::Timer::InitializeTimer(OUT PKTIMER Timer,
|
||||
IN KTIMER_TYPE Type)
|
||||
{
|
||||
/* Initialize the header */
|
||||
Timer->Header.Type = TimerNotificationObject + (UCHAR)Type;
|
||||
@@ -132,7 +129,7 @@ Timer::InitializeTimer(OUT PKTIMER Timer,
|
||||
*/
|
||||
XTAPI
|
||||
ULONGLONG
|
||||
Timer::QueryTimer(IN PKTIMER Timer)
|
||||
KE::Timer::QueryTimer(IN PKTIMER Timer)
|
||||
{
|
||||
KRUNLEVEL RunLevel;
|
||||
ULONGLONG DueTime;
|
||||
@@ -180,10 +177,10 @@ Timer::QueryTimer(IN PKTIMER Timer)
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Timer::SetTimer(IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
IN LONG Period,
|
||||
IN PKDPC Dpc)
|
||||
KE::Timer::SetTimer(IN PKTIMER Timer,
|
||||
IN LARGE_INTEGER DueTime,
|
||||
IN LONG Period,
|
||||
IN PKDPC Dpc)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
@@ -200,11 +197,9 @@ Timer::SetTimer(IN PKTIMER Timer,
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
Timer::RemoveTimer(IN OUT PKTIMER Timer)
|
||||
KE::Timer::RemoveTimer(IN OUT PKTIMER Timer)
|
||||
{
|
||||
/* Remove the timer from the list */
|
||||
Timer->Header.Inserted = FALSE;
|
||||
RtlRemoveEntryList(&Timer->TimerListEntry);
|
||||
}
|
||||
|
||||
} /* namespace */
|
||||
|
Reference in New Issue
Block a user