aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/atomic/swap.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/atomic/swap.h')
-rw-r--r--src/cpu/atomic/swap.h40
1 files changed, 0 insertions, 40 deletions
diff --git a/src/cpu/atomic/swap.h b/src/cpu/atomic/swap.h
deleted file mode 100644
index cbed62c..0000000
--- a/src/cpu/atomic/swap.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef CPU_ATOMIC_SWAP_A_H
-#define CPU_ATOMIC_SWAP_A_H
-#include "../../util/mutex.h"
-
-/// https://stackoverflow.com/questions/16329123/use-of-strexeq-instead-of-strex-for-spinlock-implementation-in-arm
-/// https://elixir.bootlin.com/linux/v4.9/source/arch/arm/include/asm/spinlock.h
-/// https://elixir.bootlin.com/linux/v4.9/source/arch/arm/include/asm/spinlock_types.h#L23
-/// https://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
-/// https://developer.arm.com/documentation/dht0008/a/arm-synchronization-primitives/practical-uses/implementing-a-semaphore?lang=en
-
-// TODO: Once scheduling works, have a failed lock put thread in waiting state
-static inline void atm_lock(unsigned long pid, unsigned long* addr)
-{
- unsigned long tmp, current_lock_value;
- asm volatile(
-"1: ldrex %0, [%3]\n"
-" cmp %0, #0\n"
-" wfene\n"
-" strexeq %1, %2, [%3]\n"
-" teq %1, #0\n"
-" bne 1b\n"
-" dmb"
- : "=&r" (current_lock_value), "=&r" (tmp)
- : "r" (pid), "r" (addr)
- : "cc");
-}
-
-static inline void atm_release(unsigned long* addr)
-{
- unsigned long cleared = NULL_PID;
- asm volatile(
-" dmb\n"
-" str %0, [%1]\n"
-" dsb\n"
-" sev"
- :: "r" (cleared), "r" (addr)
- : "cc");
-}
-
-#endif