diff options
author | Michael Brown | 2007-07-04 00:09:56 +0200 |
---|---|---|
committer | Michael Brown | 2007-07-04 00:09:56 +0200 |
commit | 89349d7fad252f0b36be4a764369e6dd40a2e692 (patch) | |
tree | 72b112d6152fadee77673994f1e92b82a9c506e8 /src/include/gpxe/init.h | |
parent | Added missing line to set return status code. (diff) | |
download | ipxe-89349d7fad252f0b36be4a764369e6dd40a2e692.tar.gz ipxe-89349d7fad252f0b36be4a764369e6dd40a2e692.tar.xz ipxe-89349d7fad252f0b36be4a764369e6dd40a2e692.zip |
Separated out initialisation functions from startup/shutdown functions.
Diffstat (limited to 'src/include/gpxe/init.h')
-rw-r--r-- | src/include/gpxe/init.h | 83 |
1 files changed, 47 insertions, 36 deletions
diff --git a/src/include/gpxe/init.h b/src/include/gpxe/init.h index b5e2f864..a5caa3e0 100644 --- a/src/include/gpxe/init.h +++ b/src/include/gpxe/init.h @@ -3,35 +3,56 @@ #include <gpxe/tables.h> -/* - * In order to avoid having objects dragged in just because main() - * calls their initialisation function, we allow each object to - * specify that it has a function that must be called to initialise - * that object. The function call_init_fns() will call all the - * included objects' initialisation functions. +/** + * An initialisation function * - * Objects that require initialisation should include init.h and - * register the initialisation function using INIT_FN(). + * Initialisation functions are called exactly once, as part of the + * call to initialise(). + */ +struct init_fn { + void ( * initialise ) ( void ); +}; + +/** Declare an initialisation functon */ +#define __init_fn( init_order ) \ + __table ( struct init_fn, init_fns, init_order ) + +/** @defgroup initfn_order Initialisation function ordering + * @{ + */ + +#define INIT_EARLY 01 /**< Early initialisation */ +#define INIT_NORMAL 02 /**< Normal initialisation */ + +/** @} */ + +/** + * A startup/shutdown function * - * Objects may register up to three functions: init, reset and exit. - * init gets called only once, at the point that Etherboot is - * initialised (before the call to main()). reset gets called between - * each boot attempt. exit gets called only once, just before the - * loaded OS starts up (or just before Etherboot exits, if it exits, - * or when the PXE NBP calls UNDI_SHUTDOWN, if it's a PXE NBP). + * Startup and shutdown functions may be called multiple times, as + * part of the calls to startup() and shutdown(). + */ +struct startup_fn { + void ( * startup ) ( void ); + void ( * shutdown ) ( void ); +}; + +/** Declare a startup/shutdown function */ +#define __startup_fn( startup_order ) \ + __table ( struct startup_fn, startup_fns, startup_order ) + +/** @defgroup startfn_order Startup/shutdown function ordering + * + * Shutdown functions are called in the reverse order to startup + * functions. * - * The syntax is: - * INIT_FN ( init_order, init_function, reset_function, exit_function ); - * where init_order is an ordering taken from the list below. Any - * function may be left as NULL. + * @{ */ -/* An entry in the initialisation function table */ +#define STARTUP_EARLY 01 /**< Early startup */ +#define STARTUP_NORMAL 02 /**< Normal startup */ -struct init_fn { - void ( *init ) ( void ); - void ( *exit ) ( void ); -}; +/** @} */ /* Use double digits to avoid problems with "10" < "9" on alphabetic sort */ #define INIT_CONSOLE 02 @@ -40,19 +61,9 @@ struct init_fn { #define INIT_TIMERS 05 #define INIT_LOADBUF 08 #define INIT_PCMCIA 09 -#define INIT_RPC 11 - -/* Macro for creating an initialisation function table entry */ -#define INIT_FN( init_order, init_func, exit_func ) \ - struct init_fn PREFIX_OBJECT(init_fn__) \ - __table ( struct init_fn, init_fn, init_order ) = { \ - .init = init_func, \ - .exit = exit_func, \ - }; - -/* Function prototypes */ -void call_init_fns ( void ); -void call_exit_fns ( void ); +extern void initialise ( void ); +extern void startup ( void ); +extern void shutdown ( void ); #endif /* _GPXE_INIT_H */ |