stos: ke: Add initial support for spinlocks

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
Chloe M.
2026-06-23 22:20:11 +00:00
parent 0fbce493e3
commit b5c2ba80f7
3 changed files with 101 additions and 0 deletions
+1
View File
@@ -17,6 +17,7 @@ CFILES += $(shell find ../drivers -name "*.c")
CFILES += $(shell find ../mm -name "*.c")
CFILES += $(shell find ../ex -name "*.c")
CFILES += $(shell find bpal -name "*.c")
CFILES += $(shell find synch -name "*.c")
DFILES = $(CFILES:.c=.d)
OFILES = $(CFILES:.c=.o)
+52
View File
@@ -0,0 +1,52 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: Spinlock primitive
* Author: Chloe M.
*/
#include <ke/spinlock.h>
#include <hal/prim.h>
VOID KeSpinLockInit(SPINLOCK *Lock, const CHAR *Name)
{
if (Lock == NULL) {
return;
}
Lock->Data = 0;
}
VOID
KeSpinLockAcquire(SPINLOCK *Lock, BOOLEAN IrqMut)
{
IRQL LastIrql;
if (Lock == NULL) {
return;
}
if (IrqMut) {
LastIrql = HalRaiseIrql(IRQL_CRITICAL);
}
/* Acquire the lock */
while (HalCpuAswap(&Lock->Data, 1)) {
HalCpuSpinWait();
}
if (IrqMut) {
HalLowerIrql(LastIrql);
}
}
VOID
KeSpinLockRelease(SPINLOCK *Lock)
{
if (Lock == NULL) {
return;
}
HalCpuAswap(&Lock->Data, 0);
}