Use a linker-table based system to automatically mark and start up

permanent processes, rather than requiring each one to have its own
initialisation function.
This commit is contained in:
Michael Brown
2007-07-03 20:09:14 +01:00
parent 4bcfe7507b
commit fd86c819ba
6 changed files with 35 additions and 18 deletions

View File

@@ -42,7 +42,6 @@ struct init_fn {
#define INIT_LOADBUF 08
#define INIT_PCMCIA 09
#define INIT_RPC 11
#define INIT_PROCESS 12
/* Macro for creating an initialisation function table entry */
#define INIT_FN( init_order, init_func, reset_func, exit_func ) \

View File

@@ -9,6 +9,7 @@
#include <gpxe/list.h>
#include <gpxe/refcnt.h>
#include <gpxe/tables.h>
/** A process */
struct process {
@@ -33,6 +34,7 @@ struct process {
extern void process_add ( struct process *process );
extern void process_del ( struct process *process );
extern void step ( void );
extern void init_processes ( void );
/**
* Initialise process without adding to process list
@@ -62,4 +64,13 @@ process_init ( struct process *process,
process_add ( process );
}
/**
* Declare a permanent process
*
* Permanent processes will be automatically added to the process list
* at initialisation time.
*/
#define __permanent_process \
__table ( struct process, processes, 01 )
#endif /* _GPXE_PROCESS_H */