From 605d5e5629e14050170626f1dc756595ba41ac51 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Sun, 6 Oct 2019 18:28:59 +0200
Subject: [PATCH] feat(hw-locks): Introduce new hw-lock API

Re-add a `hwlock_acquire()` method, but this time without a timeout
parameter.  From a functional point of view, this is just a wrapper
around `mutex_lock()`.

Additionally, add `hwlock_acquire_nonblock()` which behaves like
`mutex_trylock()`.

Signed-off-by: Rahix <rahix@rahix.de>
---
 epicardium/modules/hw-lock.c | 16 ++++++++++++++++
 epicardium/modules/modules.h |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/epicardium/modules/hw-lock.c b/epicardium/modules/hw-lock.c
index 8e584412..47929fe0 100644
--- a/epicardium/modules/hw-lock.c
+++ b/epicardium/modules/hw-lock.c
@@ -21,6 +21,22 @@ void hwlock_init(void)
 	}
 }
 
+void hwlock_acquire(enum hwlock_periph p)
+{
+	assert(p < _HWLOCK_MAX);
+	mutex_lock(&hwlock_mutex[p]);
+}
+
+int hwlock_acquire_nonblock(enum hwlock_periph p)
+{
+	assert(p < _HWLOCK_MAX);
+	if (mutex_trylock(&hwlock_mutex[p])) {
+		return 0;
+	} else {
+		return -EBUSY;
+	}
+}
+
 int hwlock_acquire_timeout(enum hwlock_periph p, TickType_t wait)
 {
 	assert(p < _HWLOCK_MAX);
diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h
index ecfa12ae..3d61abcc 100644
--- a/epicardium/modules/modules.h
+++ b/epicardium/modules/modules.h
@@ -98,6 +98,8 @@ enum hwlock_periph {
 };
 
 int hwlock_acquire_timeout(enum hwlock_periph p, TickType_t wait);
+void hwlock_acquire(enum hwlock_periph p);
+int hwlock_acquire_nonblock(enum hwlock_periph p);
 void hwlock_release(enum hwlock_periph p);
 
 /* ---------- Display ------------------------------------------------------ */
-- 
GitLab