summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarty Connor2007-07-03 22:02:26 +0200
committerMarty Connor2007-07-03 22:02:26 +0200
commit6be8cdbb6f2a003aed4b06ce15d296f2d9e0ebf2 (patch)
tree46830720996e606b842656b1b2ba52cf6c6947b7 /src
parentWarnings purge: src/arch/i386, src/core/disk.c, ramdisk, autoboot (diff)
parentUse a linker-table based system to automatically mark and start up (diff)
downloadipxe-6be8cdbb6f2a003aed4b06ce15d296f2d9e0ebf2.tar.gz
ipxe-6be8cdbb6f2a003aed4b06ce15d296f2d9e0ebf2.tar.xz
ipxe-6be8cdbb6f2a003aed4b06ce15d296f2d9e0ebf2.zip
Merge branch 'master' of /pub/scm/gpxe
Diffstat (limited to 'src')
-rw-r--r--src/core/main.c5
-rw-r--r--src/core/process.c18
-rw-r--r--src/include/gpxe/init.h1
-rw-r--r--src/include/gpxe/process.h11
-rw-r--r--src/net/netdevice.c9
-rw-r--r--src/net/retry.c9
6 files changed, 35 insertions, 18 deletions
diff --git a/src/core/main.c b/src/core/main.c
index 64e098ca3..5b01df9cc 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -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();
}
diff --git a/src/core/process.c b/src/core/process.c
index 0583a398c..bd35e614f 100644
--- a/src/core/process.c
+++ b/src/core/process.c
@@ -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 );
+ }
+}
diff --git a/src/include/gpxe/init.h b/src/include/gpxe/init.h
index bd4cd97d4..b13674ec7 100644
--- a/src/include/gpxe/init.h
+++ b/src/include/gpxe/init.h
@@ -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 ) \
diff --git a/src/include/gpxe/process.h b/src/include/gpxe/process.h
index c0837fa4f..595787c0f 100644
--- a/src/include/gpxe/process.h
+++ b/src/include/gpxe/process.h
@@ -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 */
diff --git a/src/net/netdevice.c b/src/net/netdevice.c
index 971830d97..fb4612bc9 100644
--- a/src/net/netdevice.c
+++ b/src/net/netdevice.c
@@ -448,13 +448,6 @@ static void net_step ( struct process *process __unused ) {
}
/** Networking stack process */
-static struct process net_process = {
+struct process net_process __permanent_process = {
.step = net_step,
};
-
-/** Initialise the networking stack process */
-static void init_net ( void ) {
- process_add ( &net_process );
-}
-
-INIT_FN ( INIT_PROCESS, init_net, NULL, NULL );
diff --git a/src/net/retry.c b/src/net/retry.c
index f8c34b813..6734968f5 100644
--- a/src/net/retry.c
+++ b/src/net/retry.c
@@ -167,13 +167,6 @@ static void retry_step ( struct process *process __unused ) {
}
/** Retry timer process */
-static struct process retry_process = {
+struct process retry_process __permanent_process = {
.step = retry_step,
};
-
-/** Initialise the retry timer module */
-static void init_retry ( void ) {
- process_add ( &retry_process );
-}
-
-INIT_FN ( INIT_PROCESS, init_retry, NULL, NULL );