[nap] Formalise the CPU sleeping API
[people/mcb30/gpxe.git] / src / include / gpxe / nap.h
1 #ifndef _GPXE_NAP_H
2 #define _GPXE_NAP_H
3
4 /** @file
5  *
6  * CPU sleeping
7  *
8  */
9
10 #include <gpxe/api.h>
11 #include <config/nap.h>
12
13 /**
14  * Calculate static inline CPU sleeping API function name
15  *
16  * @v _prefix           Subsystem prefix
17  * @v _api_func         API function
18  * @ret _subsys_func    Subsystem API function
19  */
20 #define NAP_INLINE( _subsys, _api_func ) \
21         SINGLE_API_INLINE ( NAP_PREFIX_ ## _subsys, _api_func )
22
23 /**
24  * Provide an CPU sleeping API implementation
25  *
26  * @v _prefix           Subsystem prefix
27  * @v _api_func         API function
28  * @v _func             Implementing function
29  */
30 #define PROVIDE_NAP( _subsys, _api_func, _func ) \
31         PROVIDE_SINGLE_API ( NAP_PREFIX_ ## _subsys, _api_func, _func )
32
33 /**
34  * Provide a static inline CPU sleeping API implementation
35  *
36  * @v _prefix           Subsystem prefix
37  * @v _api_func         API function
38  */
39 #define PROVIDE_NAP_INLINE( _subsys, _api_func ) \
40         PROVIDE_SINGLE_API_INLINE ( NAP_PREFIX_ ## _subsys, _api_func )
41
42 /* Include all architecture-independent I/O API headers */
43 #include <gpxe/null_nap.h>
44
45 /* Include all architecture-dependent I/O API headers */
46 #include <bits/nap.h>
47
48 /**
49  * Sleep until next CPU interrupt
50  *
51  */
52 void cpu_nap ( void );
53
54 #endif /* _GPXE_NAP_H */