From 3eb96728182b9b48ee6902c3b87c9e6433d1f25e Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Wed, 8 Feb 2012 10:22:52 +0100 Subject: [PATCH] Add a timeout polling loop convenience wrapper Signed-off-by: Sascha Hauer --- include/clock.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/clock.h b/include/clock.h index af5b9395b..123f8747a 100644 --- a/include/clock.h +++ b/include/clock.h @@ -40,4 +40,23 @@ void mdelay(unsigned long msecs); #define MSECOND ((uint64_t)(1000 * 1000)) #define USECOND ((uint64_t)(1000)) +/* + * Convenience wrapper to implement a typical polling loop with + * timeout. returns 0 if the condition became true within the + * timeout or -ETIMEDOUT otherwise + */ +#define wait_on_timeout(timeout, condition) \ +({ \ + int __ret = 0; \ + uint64_t __to_start = get_time_ns(); \ + \ + while (!(condition)) { \ + if (is_timeout(__to_start, (timeout))) { \ + __ret = -ETIMEDOUT; \ + break; \ + } \ + } \ + __ret; \ +}) + #endif /* CLOCK_H */