summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/KernelKit/Semaphore.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-24 03:02:43 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-24 03:02:43 +0100
commit83d870e58457a1d335a1d9b9966a6a1887cc297b (patch)
tree72888f88c7728c82f3f6df1f4f70591de15eab36 /dev/kernel/KernelKit/Semaphore.h
parentab37adbacf0f33845804c788b39680cd754752a8 (diff)
feat! breaking changes on kernel sources.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/KernelKit/Semaphore.h')
-rw-r--r--dev/kernel/KernelKit/Semaphore.h110
1 files changed, 0 insertions, 110 deletions
diff --git a/dev/kernel/KernelKit/Semaphore.h b/dev/kernel/KernelKit/Semaphore.h
deleted file mode 100644
index 831774a5..00000000
--- a/dev/kernel/KernelKit/Semaphore.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ========================================
-
- Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
-
-======================================== */
-
-#pragma once
-
-/// @author Amlal El Mahrouss
-/// @file Semaphore.h
-/// @brief Semaphore structure and functions for synchronization in the kernel.
-
-#include <CompilerKit/CompilerKit.h>
-#include <KernelKit/Timer.h>
-#include <NeKit/Defines.h>
-
-#define kSemaphoreOwnerIndex (0U)
-#define kSemaphoreCountIndex (1U)
-
-#define kSemaphoreCount (2U)
-
-#define kSemaphoreIncrementOwner(sem) (sem[kSemaphoreOwnerIndex]++)
-#define kSemaphoreDecrementOwner(sem) (sem[kSemaphoreOwnerIndex]--)
-
-namespace Kernel {
-/// @brief Semaphore structure used for synchronization.
-typedef UInt64 SemaphoreArr[kSemaphoreCount];
-
-/// @brief Checks if the semaphore is valid.
-inline BOOL rtl_sem_is_valid(const SemaphoreArr& sem, UInt64 owner = 0) {
- return sem[kSemaphoreOwnerIndex] == owner && sem[kSemaphoreCountIndex] > 0;
-}
-
-/// @brief Releases the semaphore, resetting its owner and count.
-/// @param sem
-/// @return
-inline BOOL rtl_sem_release(SemaphoreArr& sem) {
- sem[kSemaphoreOwnerIndex] = 0;
- sem[kSemaphoreCountIndex] = 0;
-
- return TRUE;
-}
-
-/// @brief Initializes the semaphore with an owner and a count of zero.
-/// @param sem the semaphore array to use.
-/// @param owner the owner to set, could be anything identifitable.
-/// @return
-inline BOOL rtl_sem_acquire(SemaphoreArr& sem, UInt64 owner) {
- if (!owner) {
- err_global_get() = kErrorInvalidData;
- return FALSE; // Invalid owner
- }
-
- sem[kSemaphoreOwnerIndex] = owner;
- sem[kSemaphoreCountIndex] = 0;
-
- return TRUE;
-}
-
-/// @brief Waits for the semaphore to be available, blocking until it is.
-/// @param sem
-/// @param timeout
-/// @param condition condition pointer.
-/// @return
-inline BOOL rtl_sem_wait(SemaphoreArr& sem, UInt64 owner, UInt64 timeout,
- BOOL* condition = nullptr) {
- if (!rtl_sem_is_valid(sem, owner)) {
- return FALSE;
- }
-
- if (timeout <= 0) {
- err_global_get() = kErrorTimeout;
-
- return FALSE;
- }
-
- if (!condition || *condition) {
- if (sem[kSemaphoreCountIndex] == 0) {
- err_global_get() = kErrorUnavailable;
- return FALSE;
- }
-
- err_global_get() = kErrorSuccess;
- sem[kSemaphoreCountIndex]--;
-
- return TRUE;
- }
-
- HardwareTimer timer(timeout);
- BOOL ret = timer.Wait();
-
- if (ret) {
- if (!condition || *condition) {
- if (sem[kSemaphoreCountIndex] == 0) {
- err_global_get() = kErrorUnavailable;
- return FALSE;
- }
-
- err_global_get() = kErrorSuccess;
- sem[kSemaphoreCountIndex]--;
-
- return TRUE;
- }
- }
-
- err_global_get() = kErrorTimeout;
-
- return FALSE; // Failed to acquire semaphore
-}
-} // namespace Kernel \ No newline at end of file