From 69ddd095003ba543ddb8f6b91626e10c8ae6da8e Mon Sep 17 00:00:00 2001 From: "Chloe M." Date: Tue, 23 Jun 2026 20:13:49 +0000 Subject: [PATCH] stos/amd64: Add processor primitives Signed-off-by: Chloe M. --- paw/stos/head/arch/amd64/prim.h | 43 +++++++++++++++++++++++++++++++++ paw/stos/head/hal/prim.h | 18 ++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 paw/stos/head/arch/amd64/prim.h create mode 100644 paw/stos/head/hal/prim.h diff --git a/paw/stos/head/arch/amd64/prim.h b/paw/stos/head/arch/amd64/prim.h new file mode 100644 index 0000000..05b8c35 --- /dev/null +++ b/paw/stos/head/arch/amd64/prim.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause. + * + * Description: Processor primitives + * Author: Chloe M. + */ + +#ifndef _MACHINE_PRIM_H_ +#define _MACHINE_PRIM_H_ 1 + +#include + +#define MdCpuSuspend() ASMV("hlt") +#define MdCpuSpinWait() ASMV("pause") + +/* + * Atomic swap operation + * + * @Ptr: Location to swap with @Value + * @Value: Value to swap to @Ptr + */ +ALWAYS_INLINE static inline QUAD +MdCpuAswap(QUAD *Ptr, QUAD Value) +{ + QUAD RetVal; + + if (Ptr == NULL) { + return 0; + } + + RetVal = *(volatile QUAD *)Ptr; + ASMV( + "xchg %0, %1\n" + : "+m" (*Ptr), "+r" (Value) + : + : "memory" + ); + + return RetVal; +} + +#endif /* !_MACHINE_PRIM_H_ */ diff --git a/paw/stos/head/hal/prim.h b/paw/stos/head/hal/prim.h new file mode 100644 index 0000000..e2fa4a7 --- /dev/null +++ b/paw/stos/head/hal/prim.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2026, Chloe M. + * Provided under the BSD-3 clause. + * + * Description: Processor primitives + * Author: Chloe M. + */ + +#ifndef _HAL_PRIM_H_ +#define _HAL_PRIM_H_ 1 + +#include + +#define HalCpuSuspend MdCpuSuspend +#define HalCpuSpinWait MdCpuSpinWait +#define HalCpuAswap MdCpuAswap + +#endif /* !_HAL_PRIM_H_ */