summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/process.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/include/ipxe/process.h b/src/include/ipxe/process.h
index f8b10a8ae..9b7579817 100644
--- a/src/include/ipxe/process.h
+++ b/src/include/ipxe/process.h
@@ -39,6 +39,8 @@ struct process_descriptor {
* CPU to another process.
*/
void ( * step ) ( void *object );
+ /** Automatically reschedule the process */
+ int reschedule;
};
/**
@@ -78,6 +80,21 @@ struct process_descriptor {
#define PROC_DESC( object_type, process, _step ) { \
.offset = process_offset ( object_type, process ), \
.step = PROC_STEP ( object_type, _step ), \
+ .reschedule = 1, \
+ }
+
+/**
+ * Define a process descriptor for a process that runs only once
+ *
+ * @v object_type Containing object data type
+ * @v process Process name (i.e. field within object data type)
+ * @v step Process' step() method
+ * @ret desc Object interface descriptor
+ */
+#define PROC_DESC_ONCE( object_type, process, _step ) { \
+ .offset = process_offset ( object_type, process ), \
+ .step = PROC_STEP ( object_type, _step ), \
+ .reschedule = 0, \
}
/**
@@ -91,6 +108,7 @@ struct process_descriptor {
#define PROC_DESC_PURE( _step ) { \
.offset = 0, \
.step = PROC_STEP ( struct process, _step ), \
+ .reschedule = 1, \
}
extern void * __attribute__ (( pure ))