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

@@ -16,6 +16,7 @@ Literature dealing with the network protocols:
#include <gpxe/heap.h>
#include <gpxe/init.h>
#include <gpxe/process.h>
#include <gpxe/device.h>
#include <gpxe/shell.h>
#include <gpxe/shell_banner.h>
@@ -29,8 +30,10 @@ Literature dealing with the network protocols:
* Call this function only once, before doing (almost) anything else.
*/
static void startup ( void ) {
hide_etherboot();
init_heap();
init_processes();
hide_etherboot();
call_init_fns();
probe_devices();
}

View File

@@ -30,6 +30,12 @@
/** Process run queue */
static LIST_HEAD ( run_queue );
/** Registered permanent processes */
static struct process processes[0]
__table_start ( struct process, processes );
static struct process processes_end[0]
__table_end ( struct process, processes );
/**
* Add process to process list
*
@@ -72,3 +78,15 @@ void step ( void ) {
break;
}
}
/**
* Initialise processes
*
*/
void init_processes ( void ) {
struct process *process;
for ( process = processes ; process < processes_end ; process++ ) {
process_add ( process );
}
}