From ff6bd309f37b557cc8861dbf502c4079926d2b99 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 18 Feb 2007 16:50:37 +0000 Subject: [PATCH] - Add stubs for KdSave, KdRestore, KdDebuggerInitialize0, KdSendPacket, KdReceivePacket to kdcom.dll - Implement and export KeTryToAcquireSpinLockAtDpcLevel. svn path=/branches/alex-kd-branch/; revision=25835 --- reactos/drivers/base/kdcom/kdbg.c | 64 ++++++++++++++++++++++++++++ reactos/drivers/base/kdcom/kdcom.def | 17 +++----- reactos/ntoskrnl/ke/spinlock.c | 34 +++++++++++++++ reactos/ntoskrnl/ntoskrnl.def | 1 + 4 files changed, 104 insertions(+), 12 deletions(-) diff --git a/reactos/drivers/base/kdcom/kdbg.c b/reactos/drivers/base/kdcom/kdbg.c index 2e5762afc82..5a79f80a2d6 100644 --- a/reactos/drivers/base/kdcom/kdbg.c +++ b/reactos/drivers/base/kdcom/kdbg.c @@ -17,6 +17,8 @@ #include #include #include +#include "arc/arc.h" +#include "windbgkd.h" typedef struct _KD_PORT_INFORMATION { @@ -553,4 +555,66 @@ KdPortEnableInterrupts() return TRUE; } +/* + * @unimplemented + */ +NTSTATUS +NTAPI +KdDebuggerInitialize0(IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL) +{ + /* FIXME: TODO */ + return STATUS_UNSUCCESSFUL; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +KdSave(IN BOOLEAN SleepTransition) +{ + /* Nothing to do on COM ports */ + return STATUS_SUCCESS; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +KdRestore(IN BOOLEAN SleepTransition) +{ + /* Nothing to do on COM ports */ + return STATUS_SUCCESS; +} + +/* + * @unimplemented + */ +VOID +NTAPI +KdSendPacket(IN USHORT PacketType, + IN PSTRING Header, + IN PSTRING Data OPTIONAL, + OUT PKD_CONTEXT Context) +{ + /* FIXME: TODO */ + return; +} + +/* + * @unimplemented + */ +ULONG +NTAPI +KdReceivePacket(IN USHORT PacketType, + OUT PSTRING Header, + OUT PSTRING Data, + OUT PUSHORT DataSize, + OUT PKD_CONTEXT Context OPTIONAL) +{ + /* FIXME: TODO */ + return 0; +} + /* EOF */ diff --git a/reactos/drivers/base/kdcom/kdcom.def b/reactos/drivers/base/kdcom/kdcom.def index 05e95ca0d2a..1c6bd4091e2 100644 --- a/reactos/drivers/base/kdcom/kdcom.def +++ b/reactos/drivers/base/kdcom/kdcom.def @@ -1,15 +1,8 @@ LIBRARY kdcom.dll EXPORTS -KdPortGetByte@4 -KdPortGetByteEx@8 -KdPortInitialize@12 -KdPortInitializeEx@12 -KdPortPollByte@4 -KdPortPollByteEx@8 -KdPortPutByte@4 -KdPortPutByteEx@8 -KdPortRestore@0 -KdPortSave@0 -KdPortDisableInterrupts@0 -KdPortEnableInterrupts@0 +KdDebuggerInitialize0@4 +KdSave@4 +KdRestore@4 +KdReceivePacket@20 +KdSendPacket@16 diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index 0a634148f47..00a910b31f4 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -165,6 +165,40 @@ KiReleaseSpinLock(IN PKSPIN_LOCK SpinLock) KxReleaseSpinLock(SpinLock); } +/* + * @implemented + */ +BOOLEAN +FASTCALL +KeTryToAcquireSpinLockAtDpcLevel(IN OUT PKSPIN_LOCK SpinLock) +{ +#ifdef CONFIG_SMP + /* Check if it's already acquired */ + if (!(*SpinLock)) + { + /* Try to acquire it */ + if (InterlockedBitTestAndSet((PLONG)SpinLock, 0)) + { + /* Someone else acquired it */ + return FALSE; + } + } + else + { + /* It was already acquired */ + return FALSE; + } + +#ifdef DBG + /* On debug builds, we OR in the KTHREAD */ + *SpinLock = (ULONG_PTR)KeGetCurrentThread() | 1; +#endif +#endif + + /* All is well, return TRUE */ + return TRUE; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ntoskrnl.def b/reactos/ntoskrnl/ntoskrnl.def index e200edf2d22..70579c44a38 100644 --- a/reactos/ntoskrnl/ntoskrnl.def +++ b/reactos/ntoskrnl/ntoskrnl.def @@ -650,6 +650,7 @@ KeSynchronizeExecution@12 KeTerminateThread@4 KeTickCount DATA @KeTryToAcquireGuardedMutex@4 +@KeTryToAcquireSpinLockAtDpcLevel@4 KeUpdateRunTime@4 KeUpdateSystemTime@0 KeUnstackDetachProcess@4