david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/gpxe/process.h
Michael Brown 3c68ff99ea [tables] Incorporate table data type information into table definition
Eliminate the potential for mismatches between table names and the
table entry data type by incorporating the data type into the
definition of the table, rather than specifying it explicitly in each
table accessor method.
2009-03-13 02:10:21 +00:00

78 lines
1.8 KiB
C

#ifndef _GPXE_PROCESS_H
#define _GPXE_PROCESS_H
/** @file
*
* Processes
*
*/
#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 ) {
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 */