Ported bnx2 driver from Etherboot 5.4.
[people/sha0/gpxe.git] / src / core / init.c
1 /**************************************************************************
2  * call_{init,reset,exit}_fns ()
3  * 
4  * Call the various initialisation and exit functions.  We use a
5  * function table so that we don't end up dragging in an object just
6  * because we call its initialisation function.
7  **************************************************************************
8  */
9
10 #include <gpxe/init.h>
11
12 static struct init_fn init_fns[0]
13         __table_start ( struct init_fn, init_fn );
14 static struct init_fn init_fns_end[0]
15         __table_end ( struct init_fn, init_fn );
16
17 void call_init_fns ( void ) {
18         struct init_fn *init_fn;
19
20         for ( init_fn = init_fns; init_fn < init_fns_end ; init_fn++ ) {
21                 if ( init_fn->init )
22                         init_fn->init ();
23         }
24 }
25
26 void call_reset_fns ( void ) {
27         struct init_fn *init_fn;
28
29         for ( init_fn = init_fns; init_fn < init_fns_end ; init_fn++ ) {
30                 if ( init_fn->reset )
31                         init_fn->reset ();
32         }
33 }
34
35 void call_exit_fns ( void ) {
36         struct init_fn *init_fn;
37
38         /* 
39          * Exit functions are called in reverse order to
40          * initialisation functions.
41          */
42         for ( init_fn = init_fns_end - 1; init_fn >= init_fns ; init_fn-- ) {
43                 if ( init_fn->exit )
44                         init_fn->exit ();
45         }
46 }