added bundled version of kernel types in ktypes.h

master
Anton Lydike 3 years ago
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…
Cancel
Save