[timer] Formalise the timer API
[people/asdlkf/gpxe.git] / src / include / gpxe / timer.h
1 #ifndef _GPXE_TIMER_H
2 #define _GPXE_TIMER_H
3
4 /** @file
5  *
6  * gPXE timer API
7  *
8  * The timer API provides udelay() for fixed delays, and currticks()
9  * for a monotonically increasing tick counter.
10  */
11
12 #include <gpxe/api.h>
13 #include <config/timer.h>
14
15 /**
16  * Calculate static inline timer API function name
17  *
18  * @v _prefix           Subsystem prefix
19  * @v _api_func         API function
20  * @ret _subsys_func    Subsystem API function
21  */
22 #define TIMER_INLINE( _subsys, _api_func ) \
23         SINGLE_API_INLINE ( TIMER_PREFIX_ ## _subsys, _api_func )
24
25 /**
26  * Provide a timer API implementation
27  *
28  * @v _prefix           Subsystem prefix
29  * @v _api_func         API function
30  * @v _func             Implementing function
31  */
32 #define PROVIDE_TIMER( _subsys, _api_func, _func ) \
33         PROVIDE_SINGLE_API ( TIMER_PREFIX_ ## _subsys, _api_func, _func )
34
35 /**
36  * Provide a static inline timer API implementation
37  *
38  * @v _prefix           Subsystem prefix
39  * @v _api_func         API function
40  */
41 #define PROVIDE_TIMER_INLINE( _subsys, _api_func ) \
42         PROVIDE_SINGLE_API_INLINE ( TIMER_PREFIX_ ## _subsys, _api_func )
43
44 /* Include all architecture-independent I/O API headers */
45
46 /* Include all architecture-dependent I/O API headers */
47 #include <bits/timer.h>
48
49 /**
50  * Delay for a fixed number of microseconds
51  *
52  * @v usecs             Number of microseconds for which to delay
53  */
54 void udelay ( unsigned long usecs );
55
56 /**
57  * Get current system time in ticks
58  *
59  * @ret ticks           Current time, in ticks
60  */
61 unsigned long currticks ( void );
62
63 /**
64  * Get number of ticks per second
65  *
66  * @ret ticks_per_sec   Number of ticks per second
67  */
68 unsigned long ticks_per_sec ( void );
69
70 /** Number of ticks per second */
71 #define TICKS_PER_SEC ( ticks_per_sec() )
72
73 #endif /* _GPXE_TIMER_H */