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