1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #ifndef _GPXE_PROCESS_H
- #define _GPXE_PROCESS_H
-
- /** @file
- *
- * Processes
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #include <gpxe/list.h>
- #include <gpxe/refcnt.h>
- #include <gpxe/tables.h>
-
- /** A process */
- struct process {
- /** List of processes */
- struct list_head list;
- /**
- * Single-step the process
- *
- * This method should execute a single step of the process.
- * Returning from this method is isomorphic to yielding the
- * CPU to another process.
- */
- void ( * step ) ( struct process *process );
- /** Reference counter
- *
- * If this interface is not part of a reference-counted
- * object, this field may be NULL.
- */
- struct refcnt *refcnt;
- };
-
- extern void process_add ( struct process *process );
- extern void process_del ( struct process *process );
- extern void step ( void );
-
- /**
- * Initialise process without adding to process list
- *
- * @v process Process
- * @v step Process' step() method
- */
- static inline __attribute__ (( always_inline )) void
- process_init_stopped ( struct process *process,
- void ( * step ) ( struct process *process ),
- struct refcnt *refcnt ) {
- INIT_LIST_HEAD ( &process->list );
- process->step = step;
- process->refcnt = refcnt;
- }
-
- /**
- * Initialise process and add to process list
- *
- * @v process Process
- * @v step Process' step() method
- */
- static inline __attribute__ (( always_inline )) void
- process_init ( struct process *process,
- void ( * step ) ( struct process *process ),
- struct refcnt *refcnt ) {
- process_init_stopped ( process, step, refcnt );
- process_add ( process );
- }
-
- /** Permanent process table */
- #define PERMANENT_PROCESSES __table ( struct process, "processes" )
-
- /**
- * Declare a permanent process
- *
- * Permanent processes will be automatically added to the process list
- * at initialisation time.
- */
- #define __permanent_process __table_entry ( PERMANENT_PROCESSES, 01 )
-
- #endif /* _GPXE_PROCESS_H */
|