diff options
Diffstat (limited to 'stage3/thread.h')
-rw-r--r-- | stage3/thread.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/stage3/thread.h b/stage3/thread.h new file mode 100644 index 0000000..9f5ff2f --- /dev/null +++ b/stage3/thread.h @@ -0,0 +1,40 @@ +#ifndef THREAD_H +#define THREAD_H + +#include "def.h" + +typedef struct { + bool exit; + i64 timeout; +} yield_arg; + +void *yield(void *arg); + +typedef struct { + str name; + void *stack_bottom; + void *stack; +} thread; + +typedef struct { + u8 irq; + union { + u8 scancode; + } data; +} event; + +typedef struct { + usize len; + usize cap; + event *data; +} event_queue; + +extern event_queue queue_write; +extern thread *irq_services[16]; + +void thread_init(); +void thread_resume(void *ret, thread *t); +thread *thread_create(str name, void *init); +void thread_sched(yield_arg *arg, void *stack); + +#endif |