added bundled version of kernel types in ktypes.h
parent
b979ab9b04
commit
a25c28d661
@ -0,0 +1,67 @@
|
||||
#ifndef H_ktypes
|
||||
#define H_ktypes
|
||||
|
||||
/*
|
||||
* Error codes
|
||||
*/
|
||||
|
||||
enum error_code {
|
||||
ENOCODE = -1, // invalid syscall code
|
||||
EINVAL = -2, // invalid argument value
|
||||
ENOMEM = -3, // not enough memory
|
||||
};
|
||||
|
||||
/*
|
||||
* Scheduling types
|
||||
*/
|
||||
|
||||
enum process_status {
|
||||
PROC_DEAD = 0,
|
||||
PROC_RDY = 1,
|
||||
PROC_WAIT_PROC = 2,
|
||||
PROC_WAIT_SLEEP = 3,
|
||||
};
|
||||
|
||||
// process structure:
|
||||
typedef struct ProcessControlBlock ProcessControlBlock;
|
||||
struct ProcessControlBlock {
|
||||
int pid;
|
||||
int pc;
|
||||
int regs[31];
|
||||
int exit_code;
|
||||
// scheduling information
|
||||
enum process_status status;
|
||||
ProcessControlBlock *waiting_for_process;
|
||||
unsigned long long int asleep_until;
|
||||
};
|
||||
|
||||
/*
|
||||
* Optionals
|
||||
*
|
||||
* in this kernel, an optional can hold a value or an error, but we can't use
|
||||
* unions here because we need to be able to distinguish errors from results.
|
||||
* this is a little space inefficient, but we'll have to deal with this, or else
|
||||
* we get global errno variables.
|
||||
*/
|
||||
|
||||
#define CreateOptionalOfType(type)\
|
||||
typedef struct Optional##type { \
|
||||
enum error_code error; \
|
||||
type value; \
|
||||
} optional_##type
|
||||
|
||||
#define has_value(optional) (optional.error == 0)
|
||||
#define has_error(optional) (!has_value(optional))
|
||||
|
||||
|
||||
typedef unsigned int size_t;
|
||||
typedef void* voidptr;
|
||||
typedef ProcessControlBlock* pcbptr;
|
||||
|
||||
// create optionals for required types
|
||||
CreateOptionalOfType(int);
|
||||
CreateOptionalOfType(size_t);
|
||||
CreateOptionalOfType(pcbptr);
|
||||
CreateOptionalOfType(voidptr);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue