From 4935a885ee74f6b803d1720de87ef6b1258b61e1 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 2 May 2012 19:26:32 -0700 Subject: timer: Add timestamp_expired() to check for expiry Rather than open code this each time, create a function for this. The wrap-around condition may not be needed, if the timer starts at zero, since we have 64 bits to play with. BUG=chrome-os-partner:9424 TEST=build and boot on daisy Change-Id: I84ae651212769b5927c452bc03f31f60a25a829e Signed-off-by: Simon Glass --- core/cortex-m/timer.c | 6 ++++++ include/timer.h | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/core/cortex-m/timer.c b/core/cortex-m/timer.c index ba45bc8783..0078936f5a 100644 --- a/core/cortex-m/timer.c +++ b/core/cortex-m/timer.c @@ -37,6 +37,12 @@ static void expire_timer(task_id_t tskid) task_set_event(tskid, TASK_EVENT_TIMER, 0); } +int timestamp_expired(timestamp_t deadline) +{ + timestamp_t now = get_time(); + + return ((int64_t)(now.val - deadline.val) >= 0); +} void process_timers(int overflow) { diff --git a/include/timer.h b/include/timer.h index 4e132ebd6f..796318a1d0 100644 --- a/include/timer.h +++ b/include/timer.h @@ -30,6 +30,14 @@ int timer_arm(timestamp_t tstamp, task_id_t tskid); /* Cancel a running timer for the specified task id. */ int timer_cancel(task_id_t tskid); +/** + * Check if a timestamp has passed / expired + * + * @param deadline deadline timer value to check + * @return 0 if deadline has not yet passed, 1 if it has passed + */ +int timestamp_expired(timestamp_t deadline); + /* Busy-wait the selected number of microseconds. Note that calling this * with us>1000 may impact system performance; use usleep for longer delays. */ void udelay(unsigned us); -- cgit v1.2.1