coreboot: add timer queue implementation
A timer queue provides the mechanism for calling functions in the future by way of a callback. It utilizes the MONOTONIC_TIMER to track time through the boot. The implementation is a min-heap for keeping track of the next-to-expire callback. Change-Id: Ia56bab8444cd6177b051752342f53b53d5f6afc1 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/3158 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
committed by
Ronald G. Minnich
parent
6b0fb0dc3c
commit
340ca91f18
@@ -38,6 +38,17 @@ struct rela_time {
|
||||
long microseconds;
|
||||
};
|
||||
|
||||
/* A timeout_callback structure is used for the book keeping for scheduling
|
||||
* work in the future. When a callback is called the structure can be
|
||||
* re-used for scheduling as it is not being tracked by the core timer
|
||||
* library any more. */
|
||||
struct timeout_callback {
|
||||
void *priv;
|
||||
void (*callback)(struct timeout_callback *tocb);
|
||||
/* Not for public use. The timer library uses the fields below. */
|
||||
struct mono_time expiration;
|
||||
};
|
||||
|
||||
/* Obtain the current monotonic time. The assumption is that the time counts
|
||||
* up from the value 0 with value 0 being the point when the timer was
|
||||
* initialized. Additionally, the timer is assumed to only be valid for the
|
||||
@@ -49,6 +60,13 @@ struct rela_time {
|
||||
* of 10 seconds. */
|
||||
void timer_monotonic_get(struct mono_time *mt);
|
||||
|
||||
/* Returns 1 if callbacks still present in the queue. 0 if no timers left. */
|
||||
int timers_run(void);
|
||||
|
||||
/* Schedule a callback to be ran microseconds from time of invocation.
|
||||
* 0 returned on success, < 0 on error. */
|
||||
int timer_sched_callback(struct timeout_callback *tocb, unsigned long us);
|
||||
|
||||
/* Add microseconds to an absoute time. */
|
||||
static inline void mono_time_add_usecs(struct mono_time *mt, long us)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user