From ccaa28399ac02ece8044fc1cf6d2a1eb5eb8a579 Mon Sep 17 00:00:00 2001 From: belliash Date: Thu, 16 Feb 2023 19:29:30 +0100 Subject: [PATCH] Initial semaphores support --- sdk/xtdk/kefuncs.h | 6 ++++++ xtoskrnl/CMakeLists.txt | 1 + xtoskrnl/ke/semphore.c | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 xtoskrnl/ke/semphore.c diff --git a/sdk/xtdk/kefuncs.h b/sdk/xtdk/kefuncs.h index 423fb41..a55d4b7 100644 --- a/sdk/xtdk/kefuncs.h +++ b/sdk/xtdk/kefuncs.h @@ -16,6 +16,12 @@ /* Kernel services routines forward references */ +XTAPI +VOID +KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, + IN LONG Count, + IN LONG Limit); + XTAPI VOID KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock); diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 53dae36..bfdce2d 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -18,6 +18,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.c ${XTOSKRNL_SOURCE_DIR}/ke/globals.c ${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.c + ${XTOSKRNL_SOURCE_DIR}/ke/semphore.c ${XTOSKRNL_SOURCE_DIR}/ke/spinlock.c ${XTOSKRNL_SOURCE_DIR}/ke/timer.c ${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.c diff --git a/xtoskrnl/ke/semphore.c b/xtoskrnl/ke/semphore.c new file mode 100644 index 0000000..02aff0d --- /dev/null +++ b/xtoskrnl/ke/semphore.c @@ -0,0 +1,41 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/ke/semphore.c + * DESCRIPTION: Semaphores support + * DEVELOPERS: Rafal Kupiec + */ + +#include + + +/** + * initializes a kernel semaphore object. + * + * @param Semaphore + * Supplies a pointer to a semaphore object. + * + * @param Count + * Specifies the initial count value of the semaphore. + * + * @param Limit + * Specifies a maximum count value of the semaphore. + * + * @return This routine does not return any value. + * + * @since NT 3.5 + */ +XTAPI +VOID +KeInitializeSemaphore(IN PKSEMAPHORE Semaphore, + IN LONG Count, + IN LONG Limit) +{ + /* Initialize semaphore header and limit */ + Semaphore->Header.Type = SemaphoreObject; + Semaphore->Header.SignalState = Count; + Semaphore->Limit = Limit; + + /* Initialize semaphore wait list */ + RtlInitializeListHead(&Semaphore->Header.WaitListHead); +}