Update EX subsystem to use C++ RTL api
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 21s
Builds / ExectOS (amd64, release) (push) Failing after 19s
Builds / ExectOS (i686, debug) (push) Failing after 23s
Builds / ExectOS (i686, release) (push) Failing after 21s

This commit is contained in:
2025-09-11 19:15:52 +02:00
parent 3395934330
commit 1357e92627

View File

@@ -9,10 +9,6 @@
#include <xtos.hh> #include <xtos.hh>
/* Kernel Executive */
namespace EX
{
/** /**
* Acquires the rundown protection for given descriptor. * Acquires the rundown protection for given descriptor.
* *
@@ -25,7 +21,7 @@ namespace EX
*/ */
XTFASTCALL XTFASTCALL
BOOLEAN BOOLEAN
Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
ULONG_PTR CurrentValue, NewValue; ULONG_PTR CurrentValue, NewValue;
@@ -46,8 +42,8 @@ Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
NewValue = CurrentValue + 2; NewValue = CurrentValue + 2;
/* Exchange the value */ /* Exchange the value */
NewValue = (ULONG_PTR)RtlAtomicCompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue, NewValue = (ULONG_PTR)RTL::Atomic::CompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue,
(PVOID)CurrentValue); (PVOID)CurrentValue);
/* Make sure protection acquired */ /* Make sure protection acquired */
if(NewValue == CurrentValue) if(NewValue == CurrentValue)
@@ -73,9 +69,9 @@ Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
*/ */
XTFASTCALL XTFASTCALL
VOID VOID
Rundown::CompleteProtection(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::CompleteProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
RtlAtomicExchangePointer(&Descriptor->Ptr, (PVOID)EX_RUNDOWN_ACTIVE); RTL::Atomic::ExchangePointer(&Descriptor->Ptr, (PVOID)EX_RUNDOWN_ACTIVE);
} }
/** /**
@@ -90,7 +86,7 @@ Rundown::CompleteProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
*/ */
XTFASTCALL XTFASTCALL
VOID VOID
Rundown::InitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::InitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
/* Reset descriptor counter */ /* Reset descriptor counter */
Descriptor->Count = 0; Descriptor->Count = 0;
@@ -108,9 +104,9 @@ Rundown::InitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
*/ */
XTFASTCALL XTFASTCALL
VOID VOID
Rundown::ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
RtlAtomicExchangePointer(&Descriptor->Ptr, NULL); RTL::Atomic::ExchangePointer(&Descriptor->Ptr, NULL);
} }
/** /**
@@ -125,7 +121,7 @@ Rundown::ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
*/ */
XTFASTCALL XTFASTCALL
VOID VOID
Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
ULONG_PTR CurrentValue, NewValue; ULONG_PTR CurrentValue, NewValue;
PEX_RUNDOWN_WAIT_BLOCK WaitBlock; PEX_RUNDOWN_WAIT_BLOCK WaitBlock;
@@ -138,7 +134,7 @@ Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
WaitBlock = (PEX_RUNDOWN_WAIT_BLOCK)(CurrentValue & ~0x1); WaitBlock = (PEX_RUNDOWN_WAIT_BLOCK)(CurrentValue & ~0x1);
if(!RtlAtomicDecrement64((PLONG_PTR)&WaitBlock->Count)) if(!RTL::Atomic::Decrement64((PLONG_PTR)&WaitBlock->Count))
{ {
KE::Event::SetEvent(&WaitBlock->WakeEvent, 0, FALSE); KE::Event::SetEvent(&WaitBlock->WakeEvent, 0, FALSE);
} }
@@ -151,8 +147,8 @@ Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
NewValue = CurrentValue - 2; NewValue = CurrentValue - 2;
/* Exchange the value */ /* Exchange the value */
NewValue = (ULONG_PTR)RtlAtomicCompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue, NewValue = (ULONG_PTR)RTL::Atomic::CompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue,
(PVOID)CurrentValue); (PVOID)CurrentValue);
if(NewValue == CurrentValue) if(NewValue == CurrentValue)
{ {
@@ -176,9 +172,7 @@ Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
*/ */
XTFASTCALL XTFASTCALL
VOID VOID
Rundown::WaitForProtectionRelease(IN PEX_RUNDOWN_REFERENCE Descriptor) EX::Rundown::WaitForProtectionRelease(IN PEX_RUNDOWN_REFERENCE Descriptor)
{ {
UNIMPLEMENTED; UNIMPLEMENTED;
} }
} /* namespace */