c468213e16c11627578e302320e4b760895f57ff
[people/mdeck/gpxe.git] / src / include / gpxe / init.h
1 #ifndef _GPXE_INIT_H
2 #define _GPXE_INIT_H
3
4 #include <gpxe/tables.h>
5
6 /**
7  * An initialisation function
8  *
9  * Initialisation functions are called exactly once, as part of the
10  * call to initialise().
11  */
12 struct init_fn {
13         void ( * initialise ) ( void );
14 };
15
16 /** Declare an initialisation functon */
17 #define __init_fn( init_order ) \
18         __table ( struct init_fn, init_fns, init_order )
19
20 /** @defgroup initfn_order Initialisation function ordering
21  * @{
22  */
23
24 #define INIT_EARLY      01      /**< Early initialisation */
25 #define INIT_SERIAL     02      /**< Serial driver initialisation */
26 #define INIT_CONSOLE    03      /**< Console initialisation */
27 #define INIT_NORMAL     04      /**< Normal initialisation */
28
29 /** @} */
30
31 /**
32  * A startup/shutdown function
33  *
34  * Startup and shutdown functions may be called multiple times, as
35  * part of the calls to startup() and shutdown().
36  */
37 struct startup_fn {
38         void ( * startup ) ( void );
39         void ( * shutdown ) ( void );
40 };
41
42 /** Declare a startup/shutdown function */
43 #define __startup_fn( startup_order ) \
44         __table ( struct startup_fn, startup_fns, startup_order )
45
46 /** @defgroup startfn_order Startup/shutdown function ordering
47  *
48  * Shutdown functions are called in the reverse order to startup
49  * functions.
50  *
51  * @{
52  */
53
54 #define STARTUP_EARLY   01      /**< Early startup */
55 #define STARTUP_NORMAL  02      /**< Normal startup */
56
57 /** @} */
58
59 extern void initialise ( void );
60 extern void startup ( void );
61 extern void shutdown ( void );
62
63 #endif /* _GPXE_INIT_H */